Less Css混合参数列表或列表(Object List vs String List) [英] Less Css mixin argument list or lists (Object List vs String List)

查看:243
本文介绍了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 A,B,C


是, 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);
}



---



< blockquote>

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

解决方案

It seams to be a difference between e("A, B, C") or ~"A, B, C" and A, B, C

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);
}

---

extract(A, B, C, 2);

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)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆