いくつかの基本的なリストをサポートするために、デフォルトの less 関数を拡張しました。次のように指定された関数「nth」を追加しました。
"nth": function(obj, index){
var list = obj.value.split(",");
var n = index.value;
obj.value = list[n-1].trim();
return new tree.Anonymous(obj);
}
次に、次のように別の関数「convertstrtovar」を追加しました。
convertstrtovar: function(obj){
var str = obj.value.toString();
str = str.replace(/(@)/gi, '');
str = '~"@{' + str + '}"';
obj.value = str;
return new tree.Anonymous(obj);
}
これは '@white' のような String を受け取り、それを ~"@{white}" に変換します。以下に、less mixin のサンプル コードを示します。
@button-text-colors: "@white, @dark, @red"; //parsed as a comma separated list.
@white: white;
@dark: black;
@red: red;
.something(@color){
color: @color;
}
.some{
@t: convertstrtovar(nth(@button-text-colors, 1));
.something(@t);
}
これにより、次のような出力が得られます。
.some {
color: ~"@{white}";
}
~"@{white}" が文字列として出力され、変数 white として評価されないのはなぜですか?