【问题标题】:Less lists as a mixin argument(s)较少列表作为混合参数
【发布时间】:2014-01-27 10:21:00
【问题描述】:

说我有这个 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 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");@foo:~"A, B, C";@foo:A, B, C;之间的区别

我似乎不能使用extract(@foo, 2);,除非它被定义为一个对象列表。

有没有办法将转义字符串转换为对象列表

【问题讨论】:

    标签: css less


    【解决方案1】:

    e("A, B, C")~"A, B, C"A, B, C 之间似乎有区别

    是的,e("A, B, C")~"A, B, C" 都创建了所谓的“匿名值”类型,它从不被视为有意义的类型(它不是列表,不是数字,甚至不是字符串)。基本上,转义值就像“不要碰我”或“我知道我在做什么!”东西,它们只是“按原样”输出,编译器从不试图理解里面的内容。这基本上就是 escaped values 的用途:“打印”出编译器无法理解的内容。

    一般来说,您可以使用逗号和空格作为列表中的值分隔符。例如,您可以使用.loop-strings(A B C, 1 2 3, X Y Z;);(二维列表作为单个参数,因此使用多参数mixin,您甚至可以在一行中获得一个树维列表)。是否有任何特殊原因需要使用引用和/或转义值?例如,你可以这样写:

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

    【讨论】:

    • 冠军!不知道空格分隔符。很好的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2013-10-07
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多