为什么 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
}