在SCSS中,我有一个mixin,它需要一个列表并检查其长度,如下所示:
@mixin foo($list){
@debug length($list);
}
当我传递两个以上列表的列表时($a, $a)
如下所示,
$a: (1, 2, 3);
@include foo(($a, $a));
length
函数计算 ($a, $a)
内部有两个 $a
-s,并返回结果:
DEBUG: 2
但是当我传递一个由单个列表组成的列表时($a)
如下所示,
@include foo(($a));
似乎列表$a
被分解了,length
函数在$a
中计算三个元素,而不是计算($a)
中$a
-s的数量,并返回结果:
DEBUG: 3
如果我进一步嵌入列表,这没有区别。以下所有操作都返回相同的结果:
@include foo($a);
@include foo(($a));
@include foo((($a)));
这是预期的功能吗?为什么会发生这种情况,在这些情况下有没有办法返回1
?
在 Sass 中,括号用于指示操作顺序,而不是表示您有一个包含单个元素的列表。
在 Sass 3.3 中,添加尾随逗号会自动将您的值转换为列表:
$foo: 1, ;
你可能想做的是让你的mixin接受可变数量的参数并将它们用作列表。 那看起来像这样:
@mixin foo($list...){
@debug length($list);
}
.foo {
@include foo(1);
}
.foo {
@include foo(1, 2);
}
.foo {
@include foo((1, 2));
}
控制台提供所需的结果:
DEBUG: 1
DEBUG: 2
DEBUG: 1
但是,如果这样做,列表必须是 mixin(或函数)的最后一个参数。