我创建了大量的SASS变量,我需要在用户更改后检查它们是否格式正确。
例如,我有以下变量:
$varible1: true;
$variable2: false;
$variable3: true;
$variable4: "400, 500, 600";
$variable5: true;
$variable6: "foo bar buzz";
$variable7: 4;
$variable8: 9;
etc...
如您所见,并非所有变量都是布尔值,有些也是数字或字符串。但是,每个变量总是应该是某种类型($variable5
应该总是一个布尔值等)。我想要做的是检查每个变量类型,如果不正确则给出错误消息。我编写了以下@if
语句来检查第一个变量:
@if type-of($variable1) != bool {
@error "'#{$variable1}' is not a valid value for $variable1, you must use a boolean.";
}
问题是,我最终会得到一个包含30多个@if
语句的列表来检查每个变量。有没有办法可以在一个$variable1
语句中检查$variable2
,$variable3
,$variable5
和@if
,并将变量名称和值传递给错误消息?
到目前为止,我唯一的想法是创建另一个变量,它是我希望成为布尔值的所有变量的列表,然后对它进行@each
循环,如:
$boolean-variables: $variable1, $variable2, $variable3...
@each $var in $boolean-variables {
@if type-of($var) != bool {
@error "'#{$var}' is not a valid value for $var, you must use a boolean.";
}
}
这是一个很好的方法吗,还是有其他建议?感谢
答案 0 :(得分:0)
对于那些感兴趣的人,我最终使用了变量名称和类型的映射,然后循环,然后将名称和类型注入到错误消息中。
然而,我确实遇到了一些设置地图的问题。首先,key
不能是变量,因为它返回变量值而不是名称。我通过使用变量的名称减去$
来解决这个问题。这让我可以看到我正在查看哪个变量,同时仍然是key
。其次,我需要获得变量的值以及类型。我将每对value
设置为另一个地图,变量为key
,类型为value
。这意味着我可以在此数据上运行另一个循环来检查这些值。下面是我的地图结构的示例:
$setting-types: (
variable-name1: ($variable-name1: bool),
variable-name2: ($variable-name2: bool),
variable-name3: ($variable-name3: list)
}
这有效地回归:
$setting-types: (
variable-name1: (true: bool),
variable-name2: (false: bool),
variable-name3: (foo, bar, buzz: list)
}
然后我就可以在地图上运行@each
函数,如下所示:
@each $setting, $data in $setting-types {
$setting-name: $setting;
@each $variable, $type in $data {
@if type-of($variable) != $type {
@error "'#{$variable}' is not a valid value for $#{$setting-name}, you must use a #{$type}.";
}
}
}
第一个循环拆分映射中的每个变量,然后第二个循环遍历变量值和预期数据类型。然后我使用type-of()
来检查变量的数据类型是什么,如果与地图中写入的内容不匹配,则显示错误。我还在第一个循环之后设置了另一个变量,它只是来自第一个循环的key
,但是可以在第二个循环中访问,以帮助在错误消息中提供一些清晰度。
如果他们需要做类似的事情,我希望这足以让别人理解。