说我有这个混入:
.loop-strings("A, B, C", "1, 2, 3", "X, Y, Z";);
像这样实现:
.loop-strings(@list, @index: 1) when (isstring(extract(@list, @index))) { @currentMember: extract(@list, @index); .do-something-with(@currentMember); .loop-strings(@list, (@index + 1)); /* loop the next member */ } .do-something-with(...) { @args1 : e(@arguments); @args2 : A, B, C; args1: @args1; args2: @args2; extract-args1-2: extract(@args1, 2); extract-args2-2: extract(@args2, 2); }
结果:
args1: A, B, C; extract-args1-2: extract(A, B, C, 2); args1: 1, 2, 3; extract-args1-2: extract(1, 2, 3, 2); args1: X, Y, Z; args2: A, B, C; extract-args1-2: extract(X, Y, Z, 2); extract-args2-2: B;
这些接缝是@foo:e("A, B, C");or @foo:~"A, B, C";和之间的区别@foo:A, B, C;
@foo:e("A, B, C");
@foo:~"A, B, C";
@foo:A, B, C;
我似乎无法使用,extract(@foo, 2);除非将其定义为对象列表。
extract(@foo, 2);
有没有一种方法可以将保留的字符串转换为对象列表
可能是e("A, B, C")或~"A, B, C"和之间的差异A, B, C
e("A, B, C")
~"A, B, C"
A, B, C
是的,两者e("A, B, C")并~"A, B, C"创造出永远不会认为是有意义的类型所谓的“匿名值”类型(它不是一个列表,而不是一个数字,甚至不是一个字符串)。基本上,逃避的值只是“不要碰我”或“我知道我在做什么!”之类的东西。东西,它们只是按“原样”输出,并且编译器从不尝试了解其中的内容。这基本上就是转义值的确切用途:“打印”出编译器无法理解的内容。
通常请注意,您可以在列表中同时使用逗号和空格作为值定界符。例如,您可以使用.loop-strings(A B C, 1 2 3, X Y Z;);(二维列表作为单个参数,因此使用多参数mixin,甚至可以在一行中获得一个树形列表)。您是否需要使用引号和/或转义值的任何特殊原因?例如,您可以将其编写为:
.loop-strings(A B C, 1 2 3, X Y Z;);
test { .loop-lists(A, B, C; 1, 2, 3; X, Y, Z); } .loop-lists(@lists...) { .loop(length(@lists)); .loop(@i) when (@i > 0) { .loop((@i - 1)); .do-something-with(extract(@lists, @i)); } } .do-something-with(@list) { v1: extract(@list, 1); v2: extract(@list, 2); v3: extract(@list, 3); }
提取(A,B,C,2);
目前,这是不正确的extract语法,extract仅接受两个参数,因此您可以将其编写为:
extract
extract(A B C, 2);
或作为:
@list: A, B, C; extract(@list, 2);
这是一个带有几个其他通用提示的示例:
test { .do-something(A B C, 1 2 3, X Y Z; foo bar, baz; banana); } .do-something(@p1, @p2, @p3) { args1: @arguments; // 3D list args2: extract(@arguments, 1); // 2D list: A B C, 1 2 3, X Y Z args3: extract(extract(@arguments, 1), 1); // 1D list: A B C args4: extract(extract(extract(@arguments, 1), 1), 1); // single value: A p1- : @p1; // A B C, 1 2 3, X Y Z p1-1: extract(@p1, 1); // A B C p1-3: extract(@p1, 3); // X Y Z @p2-1: extract(@p2, 1); // foo bar p2-1: @p2-1; // foo bar p2-1-2: extract(@p2-1, 2); // bar p2-2: extract(@p2, 2); // baz p3- : @p3; // banana p3-1: extract(@p3, 1); // banana // etc. quoted-p2: "@{p2}"; // if you need a quoted string do it in reverse (i.e. non-quoted list to a quoted string) }