为什么 Sass `map-get()` return 不存在键不存在的错误?
Why doesn't Sass `map-get()` return an error for a non-existent key?
为什么在提供的映射中不存在键时 map-get()
不抛出错误?
例如:
$map: (
'keyone': 'value',
'keytwo': 'value',
'keythree': 'value'
);
map-get($map, 'keyfour');
我知道 map-has-key()
并且我知道它本身可能有用,但如果我想顺利使用 map-get()
,我不应该调用 [=14= 】 每一次。我希望 map-get()
抛出一个错误,但它却默默地失败了。为什么这没有内置到 Sass 中?
如果重要的话,我正在使用 node-sass 3.2.0.
当在映射中找不到键时,map-get()
返回 null
而不是抛出错误的行为是设计使然。来自 Sass 的维护者(关于为什么 nth()
在请求丢失的元素时抛出错误而 map-get()
没有):
In general, it's good to throw errors as early as possible when code is doing something wrong. It's very likely than an out-of-range list access is accidental and incorrect; by contrast, a missing key in a map is much more likely to be purposeful.
通过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
}
为什么在提供的映射中不存在键时 map-get()
不抛出错误?
例如:
$map: (
'keyone': 'value',
'keytwo': 'value',
'keythree': 'value'
);
map-get($map, 'keyfour');
我知道 map-has-key()
并且我知道它本身可能有用,但如果我想顺利使用 map-get()
,我不应该调用 [=14= 】 每一次。我希望 map-get()
抛出一个错误,但它却默默地失败了。为什么这没有内置到 Sass 中?
如果重要的话,我正在使用 node-sass 3.2.0.
当在映射中找不到键时,map-get()
返回 null
而不是抛出错误的行为是设计使然。来自 Sass 的维护者(关于为什么 nth()
在请求丢失的元素时抛出错误而 map-get()
没有):
In general, it's good to throw errors as early as possible when code is doing something wrong. It's very likely than an out-of-range list access is accidental and incorrect; by contrast, a missing key in a map is much more likely to be purposeful.
通过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
}