意见征集:严格的一元 运算符

2022年6月15日发布,作者:Natalie Weizenbaum

您知道在 Sass 中 margin: $a -$b 是做什么的吗?如果您说是“与 margin: $a (-$b) 相同”,那么很抱歉,您错了。它实际上margin: $a - $b 相同。不用担心,您不是第一个被 Sass 解析器这个奇怪的角落绊倒的人!但我们新的语言提案旨在解决 这个问题。

严格的一元运算符提案中,该提案目前正在公开征求社区反馈,我们建议首先弃用,然后最终禁止 $a -$b 形式的表达式。我们知道弃用从来都不是一件愉快的事情,但这些弃用应该相当容易:您可以简单地编写 $a - $b$a (-$b),具体取决于您的意图。我们还将提供一个Sass 迁移工具来自动更新您的 样式表。

已弃用

  • $a -$b 将不再允许,因为它不清楚作者的意图,并且当前的行为很可能 不正确。

仍然允许

  • $a - $b 将继续工作,因为它显然应该表示 减法。

  • $a (-$b) 将继续工作,因为括号使一元减号 变得明确。

所有广泛使用的 Sass 版本都支持 $a - $b$a (-$b) 选项,因此库应该不会有任何问题来避免此弃用警告并继续支持旧版 Sass 版本。此外,您始终可以使用--quiet-deps 命令行标志quietDeps JS API 选项来静默来自您无法 控制的依赖项的警告。

为什么它以这种方式工作?为什么它以这种方式工作? 永久链接

您可能想知道,为什么 $a -$b 会以这种方式解析?简而言之,“因为其他编程语言也是这样做的”。在大多数编程语言中,运算符的解析方式与可能围绕它们的空格无关。如果您将 $a - $b 解析为减法,则也应将 $a -$b 解析为减法 

Sass 的问题是我们也继承了 CSS 中使用空格分隔的值列表,因此在某些上下文中,用户期望能够将两个表达式并排编写,并使它们的解析方式与单独使用时相同。这两个原则发生了冲突,并产生了此提案试图解决的混淆 

为什么不只是更改其工作方式?为什么不只是更改其工作方式? 永久链接

理论上,我们可以更改 Sass,使 $a -$b 的解析方式与 $a (-$b) 相同:一个空格分隔的值列表,后者带有一元减号。我们选择不这样做有两个 原因

  1. 从实用角度来看,进行破坏性更改以更改现有语法的行为比仅仅完全禁止语法更痛苦。它需要更多版本和更多具有不同行为的 Sass 版本。它还为样式表打开了大门,使样式表能够一次升级多个版本以切换到新行为而不会产生错误,这可能导致最坏的情况:发布不正确的 样式。

  2. $a -$b 在每种情况下应该解析为 $a (-$b) 并不明显。来自其他编程语言的用户可能期望它以这些语言中的解析方式进行解析。即使在 Sass 中,$a -$b 也将继续在 calc() 中成为有效的二元运算。它可能不是优雅的风格,但有时格式不是作者最 关心的!

请告诉我们您的想法!请告诉我们您的想法! 永久链接

如果您对更改有任何想法或意见,请阅读完整的提案,然后提交问题并提供您的反馈。我们将开放一个月供评论,之后我们将最终确定提案并开始实施 它。