Recursion twitter中的.offsetX(0)是什么意思?

Recursion twitter中的.offsetX(0)是什么意思?,recursion,twitter-bootstrap,less,Recursion,Twitter Bootstrap,Less,我看了一下twitter引导程序mixin.less,它们在哪里生成网格。有一行代码: .offsetX (@index) when (@index > 0) { (~".offset@{index}") { .offset(@index); } .offsetX(@index - 1); } .offsetX (0) {} 有人知道那是什么吗?因为.offsetX(@index)是递归的,当索引大于0时,通过减法进行迭代,这种情况代表递归函数的终点 如果将@index设置为12

我看了一下twitter引导程序mixin.less,它们在哪里生成网格。有一行代码:

.offsetX (@index) when (@index > 0) {
  (~".offset@{index}") { .offset(@index); }
  .offsetX(@index - 1);
}
.offsetX (0) {}
有人知道那是什么吗?

因为
.offsetX(@index)
是递归的,当索引大于0时,通过减法进行迭代,这种情况代表递归函数的终点

如果将@index设置为12,它将写入
.offset12、.offset11、.offset1
,而
.offset0
则不写入任何内容

编辑 当预处理器试图解析
.offsetX(0)
的mixin调用时,when关键字将防止使用递归mixin。如果找不到另一个mixin,就会产生一个错误,有点像调用一个未定义的函数

因此,
.offset(0){}
的终止情况用于干净地退出递归

如果你想玩它,这里有一个基本的演示,你可以试着用终端机来注释这一行,然后在重新运行时观察异常


但是为什么那一行代码需要在那里呢?我的意思是它被指定为仅在
@index
大于0时执行内部代码。这不是意味着当
@index
达到零时,它应该自行终止递归吗?@zen-我更新了我的答案。希望这能让它更清晰一点。我把它归类为一个小bug。。dotless不能做到这一点,但我没有更改less.js,因为没有人抱怨或提出问题。@LukePage-记录在案,lessc抛出了“SyntaxError:找不到与…”中“.offsetX()”匹配的定义。我知道。。当它搜索mixin定义时,如果没有找到匹配项,它将出错。。无点错误如果它没有找到与参数匹配的内容,但如果由于防护而排除了某些内容,则不会出错。。这对于less.js来说可能是件好事。这样,在使用防护时就不需要默认的回退。