You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用For循环生成SCSS Spacers映射表时遇到错误的求助

For循环生成SCSS Spacers映射表时遇到错误的求助

你好,我来帮你分析下这个问题:

你想要生成这样的SCSS间距映射表:

$spacers: (
   0: 0,
   1: 4px,
   2: 8px,
   ...
);

你当前的代码是这样的:

$spacer: 4px;

$spacers: ();

@function map-set($map, $key, $value) {
  $new: ($key: $value);
  @return map-merge($map, $new);
}

@for $i from -5 through 12 {
  map-set($spacers, $i, $i * $spacer);
}

但运行后出现了错误,核心原因是SCSS中的变量是不可变的——你的map-set函数确实能生成包含新键值对的新映射,但你在循环里只是调用了这个函数,却没有把返回的新映射重新赋值给$spacers变量。这就导致原来的$spacers始终是空的,同时这种“只调用函数不处理返回值”的写法也不符合SCSS的语法规则,最终引发了报错。

解决方案

我们只需要在循环中把每次生成的新映射重新赋值给$spacers即可,这里给你两种可行的写法:

方案一:使用SCSS内置的map.set()函数

SCSS本身已经提供了用于添加/修改映射键值对的内置函数,不用自己实现:

$spacer: 4px;
$spacers: ();

@for $i from -5 through 12 {
  $spacers: map.set($spacers, $i, $i * $spacer);
}

方案二:保留你自己的map-set函数,修改循环逻辑

如果你更习惯用自己写的函数,只需要调整循环里的代码,把函数返回的新映射赋值回$spacers:

$spacer: 4px;
$spacers: ();

@function map-set($map, $key, $value) {
  $new: ($key: $value);
  @return map-merge($map, $new);
}

@for $i from -5 through 12 {
  $spacers: map-set($spacers, $i, $i * $spacer);
}

这样修改后,每次循环都会将新的键值对合并到$spacers中,最终就能生成你需要的间距映射表了。

备注:内容来源于stack exchange,提问作者Magor Menessy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:49:42