2

在编写 CSS 时主要使用 SASS,我现在也准备尝试 LESS。通读文档后,我对受保护的 mixins上下文中的以下内容感到困惑:

此外,关键字 true 是唯一的真值,使这两个 mixin 等效:

.truth (@a) when (@a) { ... }
.truth (@a) when (@a = true) { ... }

除了关键字 true 之外的任何值都是虚假的:

.class {   
  .truth(40); // Will not match any of the above definitions.
}

为什么会truth(40)不匹配第一个mixin?如果一个值(任何值)被赋予给, 本质上,如果存在,不when (@a)只是说只匹配mixin吗?既然是一个存在的值,为什么它不会在给定的 mixins 中找到匹配项?@a@a40

4

1 回答 1

7

为了简洁...

...我认为。LESS 的程序员似乎假设,如果您不想对 mixin 进行保护,那么您当然根本不添加任何when语句:

.truth(@a) { ... }

无论 的值如何,都会调用此 mixin @a,但确实需要的值@a,因此默认情况下检查值的“存在”。因此,通过增加一个when守卫,他们假设一个人确实打算再增加一个守卫(而不仅仅是允许任何价值),所以......

.truth (@a) when (@a) { ... }

...为编写保护语句提供了一种速记方式(LESS 是关于尝试加快编码速度)...

.truth (@a) when (@a = true) { ... }

这可以更快地编码一个守卫的真/假开关,并且如果它对任何值进行评估when (@a),这可能是一个多余的语句。true

诚然,从典型的编程角度来看,它似乎不太直观(不是双关语),如果@a 存在(如,除false,null或之外的任何内容0),那么该短语的when (@a)计算结果为true。但是,他们没有检查值的“存在”,而是明确检查了传递的值true(就守卫而言,它们唯一的“真实值”)。

我没有任何文档来支持我的陈述,除了 lesscss.org 上关于他们如何编码的陈述,这些陈述没有说明他们为什么编码它以这种方式工作(这部分是我目前的猜测,除非我能找到有关它的讨论文档)。

于 2013-08-01T12:12:57.160 回答