当提供的地图中不存在密钥时,为什么map-get()
不会抛出错误?
例如:
$map: (
'keyone': 'value',
'keytwo': 'value',
'keythree': 'value'
);
map-get($map, 'keyfour');
我知道map-has-key()
并且我明白这可能会有用,但如果我想顺利使用map-get()
,我不应该每个都调用map-has-key()
每一次。我希望map-get()
抛出一个错误,但它会无声地失败。为什么这不是Sass的内容?
如果重要,我正在使用node-sass 3.2.0。
答案 0 :(得分:11)
map-get()
返回null
而不是在映射中找不到键时抛出错误的行为是设计使然。来自Sass的维护者(为什么nth()
在请求缺少元素时抛出错误但map-get()
没有):
通常,在代码出错时尽早抛出错误是件好事。超出范围的列表访问很可能是偶然的和不正确的;相比之下,地图中缺少的关键字更有可能是有目的的。
通过https://github.com/sass/sass/issues/1721
我碰巧不同意nex3(map-get()
应该抛出错误,或者至少抛出一个可以被抑制的警告)。您可以通过编写自己的自定义map-get函数来获得所需的行为:
@function map-get-strict($map, $key) {
@if map-has-key($map, $key) {
@return map-get($map, $key);
} @else {
@error "ERROR: Specified index does not exist in the mapping";
}
}
$map:
( one: 1
, two: 2
);
.foo {
test1: map-get-strict($map, one); // returns the expected value of `1`
test2: map-get-strict($map, three); // raises an error
}