在下面的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
。我在这里做错了什么建议?
答案 0 :(得分:5)
第一个问题是,如果找不到值,则返回值为null
:
@function contains($list, $var) {
@return (null == index($list, $var));
}
第二个问题涉及contains函数的语义。通常,如果在列表中找到值,则名为 contains 的函数应该返回true,否则返回false(至少我希望如此):
@function contains($list, $var) {
@return (null != index($list, $var));
}
然后在地图上调用index function还有第三个问题。您必须传递一个键值对而不仅仅是该函数的键:
$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);