在下面的 SASS 代码片段中,我想检查映射是否具有特定的键。如果没有,则返回默认值(在本例中为 #bbb
(
@function contains($list, $var) {
@return (false == index($list, $var));
}
$colors: (aaa: #aaa, bbb: #bbb);
$out: if(contains($colors, aaa), map-get($colors, aaa), #bbb);
body {
color: $out;
}
出于某种原因,它总是返回#bbb
.任何建议我在这里做错了什么?
第一个问题是,如果未找到返回值,则返回值null
:
@function contains($list, $var) {
@return (null == index($list, $var));
}
第二个问题与包含函数的语义有关。通常,如果在列表中找到值,则调用 contains 的函数应返回 true,否则返回 false(至少我希望(:
@function contains($list, $var) {
@return (null != index($list, $var));
}
然后是在地图上调用索引函数的第三个问题。您必须传递一个键值对,而不仅仅是此函数的键:
$out: if(contains($colors, aaa #aaa), map-get($colors, aaa), #bbb);
现在它按预期工作,但为了完整起见,让我告诉你,已经有一个内置函数可以完全按照你试图用contains
函数实现的目标; map_has_key($map,$key(:
$out: if(map-has-key($colors, aaa), map-get($colors, aaa), #bbb);