列表的单例列表会自动分解



在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(或函数)的最后一个参数。

相关内容

  • 没有找到相关文章

最新更新