如何在Sass中创建空映射?
下面的代码将在变量如何在Sass中创建空映射?,sass,sass-maps,Sass,Sass Maps,下面的代码将在变量$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)}"; } WARNIN
$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
可以通过非常简单的方式创建空贴图:
$emptyMap: ();
根据地图上的说明,空列表和地图都是使用()
创建的。因此,上面的代码是一个完全有效的空映射,但是当测试该类型时,控制台将告诉您它是一个列表(请注意,它的类型仍然是map或list)
一旦你在地图上添加了一些东西,控制台就会告诉你这是一张地图
$map: ();
$newMap: map-merge($map, (1: test));
@warn "#{type-of($newMap)}";
// Warning: map
没有更好的本土方法可以做到这一点,但你可以把它缩短
$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
}
我明白。我不想向它添加任何内容,但我确实想通过
map-has-key()
传递它,如果类型是list
,这是一个问题。即使控制台将空映射报告为列表,它仍然被视为空映射或空列表。你可以通过map-has-key()。。。是的,似乎是这样。我发誓我之前遇到了一个错误。如果这个解决方案对你有效,请接受它作为正确答案。
@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
}