假设我有一个默认值为mixin的
$default: 1;
@mixin test($p : $default) {
@if () {
// Do something if $p was 4passed?
} @else {
// Do something if $p was not passed?
}
}
如果我这样打电话给mixin,两个不同的是:
@include test(); // A
@include test(1); // B
有没有办法可以区分默认(A)和覆盖默认(B)的默认值?
答案 0 :(得分:67)
如果你稍微修改一下你的mixin会有效(因为你实际上需要将有问题的参数传递给@if
指令。并且你希望将参数默认为null
或{ {1}},这意味着没有通过任何事情。)
false
如果要将其他值设置为默认值,则只需在if语句中检查该特定值(例如,“如果@mixin test($p: null) {
@if ($p) {
/* Do something if $p was passed */
} @else {
/* Do something if $p was not passed */
}
}
设置为默认值,则执行某些操作”)。在这里,您将如何通过设置变量的默认值来完成此操作,就像您在示例中所做的那样。但是,这不会区分“没有参数传递”和“传递的值等于默认值”。
$p
但是对于corse你可以结合两种方法...检查是否有东西传递给@mixin test($p: $default) {
@if ($p == $default) {
/* Do something if $p is set to $default */
} @else {
/* Do something else if $p is not $default */
}
}
(如果传递或不传递则做不同的事情),如果没有传递,则设置$p
的值默认。
$p
这应该适用于除@mixin test($p: null) {
@if ($p) {
/* Do something if argument passed */
} @else {
/* Do something else if no argument passed. Set $p to default. */
$p: $default;
}
}
的布尔值之外的所有内容,因为false
和null
都使用false
指令验证false
。因此,要允许传递@if
作为参数值,您需要使用更具体的表达式。例如:
false
瞧,这应该可以解决问题 - 除非你出于某种原因希望将...
@if ($p != null) {
...
作为论据。然后你需要使用其他东西作为默认值,就像一个极不可能作为参数传递的字符串,例如null
=)