本文介绍了Less Css混合参数列表或列表(Object List vs String List)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 说我有这个mixin: .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下一个成员* / } .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 B,C); 或 @foo:〜A,B,C; 和 @foo:A ,B,C; 我似乎不能使用 extract(@foo,2) code>除非定义为对象列表。 是否有一个将esacaped字符串转换为对象列表的方法解决方案 是, e(A,B,C)和〜A,B,C创建所谓的匿名值类型,永远不会被认为是有意义的类型(它不是列表,不是数字,甚至不是字符串)。基本上,转义的值只是不要碰我或我知道我在做什么!东西,他们只是输出按原样,编译器从来没有试图了解什么内部。这基本上是什么转义值用于:打印某物编译器不能理解。 一般来说,您可以同时使用逗号和空格作为列表中的值分隔符。例如,您可以使用 .loop-strings(ABC,1 2 3,XYZ;); (二维列表作为单个参数,你甚至可以在一行中获得树形列表)。有什么特别的原因你需要使用引用和/或转义的值?例如你可以写成: test { .loop-lists(A,B, 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); } --- extract(A,B,C,2); code> extract 语法,提取只接受两个参数,因此您可以写为: extract(ABC,2); 或者: @list:A,B,C; extract(@list,2); --- 有几个额外的通用提示: test { .do-something(ABC,1 2 3,XYZ;香蕉) } .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); //单值: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 //等 quoted-p2:@ {p2}; //如果你需要一个引用的字符串做它反向(即非引用列表到一个引用的字符串)} say i have this mixin:.loop-strings("A, B, C", "1, 2, 3", "X, Y, Z";);implemented like so:.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);}The result: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;These seams to be a difference between @foo:e("A, B, C"); or @foo:~"A, B, C"; and @foo:A, B, C; I seems i can't use extract(@foo, 2); unless it is defined as an object list.Is there a way to convert an esacaped string to an object list 解决方案 Yes, both e("A, B, C") and ~"A, B, C" create so-called "anonymous value" type which is never considered as a meaningful type (it's not a list, not a number, not even a string). Basically an escaped values are just something like "Don't touch me" or "I know what I'm doing!" stuff, they are just being output "as is" and the compiler never tries to understand what's inside. This is basically what exactly the escaped values are for: "print" out something the compiler can't understand.In general notice that you can use both comma and space as the value delimiter in a list. For example you can use .loop-strings(A B C, 1 2 3, X Y Z;); (two-dimensional list as a single parameter, so with a multi-argument mixin you even can get a tree-dimensional list in one line). Is there any particular reason you need to use quoted and/or escaped values? For example you could write it just as: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);}---For the moment this is incorrect extract syntax, extract accepts only two parameters so you could write this as:extract(A B C, 2);Or as:@list: A, B, C;extract(@list, 2);---Here's an example with couple of additional generic hints: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)} 这篇关于Less Css混合参数列表或列表(Object List vs String List)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-21 23:14