Как создать пустую карту в Sass?

Следующий код создаст пустую карту в переменной $test, но есть ли правильный способ сделать это? Это кажется слишком хакерским, чтобы быть лучшим способом получить пустую карту.

$test: map-remove((default:null), 'default');

@if type-of($test) != map {
    @warn "This is not a map: #{inspect($test)}";
}
@else {
    @warn "This is a map: #{inspect($test)}";
}

WARNING: This is a map: ()
         on line 7 of app/styles/functions/map.scss

person roydukkey    schedule 28.09.2018    source источник


Ответы (2)


Нет лучшего собственного способа сделать это, но вы можете сделать его короче.

$map: map-remove((x:x), x);

.foo {
  output: type-of($map); // map
}

Другим решением было бы использование пользовательской функции.

@function empty-map($x: x) {
  @return map-remove(($x:$x), $x);
}

$map2: empty-map();
$map3: empty-map();

.foo {
  output: type-of($map2); // map
  output: type-of($map3); // map
}

демонстрация SassMeister

person Quentin Veron    schedule 28.09.2018

Пустые карты можно создать очень простым способом:

$emptyMap: ();

Согласно официальной документации по картам, пустые списки и карты создан с использованием только (). Таким образом, приведенный выше код является совершенно допустимой пустой картой, но при тестировании типа консоль сообщит вам, что это список (обратите внимание, что его тип по-прежнему либо карта, либо список).

$map: ();
@warn "#{type-of($map)}";
// Warning: list

Как только вы добавите что-то на карту, консоль сообщит вам, что это карта.

$map: ();
$newMap: map-merge($map, (1: test));
@warn "#{type-of($newMap)}";
// Warning: map
person Adam    schedule 28.09.2018
comment
Я понимаю. Я не собираюсь ничего к нему добавлять, но я намерен передать его через map-has-key(), и это проблема, если тип list. - person roydukkey; 28.09.2018
comment
Несмотря на то, что консоль сообщает о пустой карте как о списке, она по-прежнему считается либо пустой картой, либо пустым списком. Вы можете передать его через map-has-key() просто отлично. - person Adam; 28.09.2018
comment
Хм... Да, похоже. Клянусь, я получал ошибку с ним раньше. - person roydukkey; 28.09.2018
comment
Если это решение работает для вас, примите его как правильный ответ. - person Adam; 25.10.2018