Recursion 更少的递归错误-从包含命名空间调用嵌套命名空间中包含的递归mixin会产生;是未定义的“;

Recursion 更少的递归错误-从包含命名空间调用嵌套命名空间中包含的递归mixin会产生;是未定义的“;,recursion,less,mixins,Recursion,Less,Mixins,以下代码在通过Visual Studio 2013的Web Essentials编译时产生错误。我认为该插件使用Winless,但在其他编译器上也失败了 .root { #namespace { .not-recursive(@x) { .margin-@{x} { margin: (1px * @x); } } .recursive(@x; @i: 0) when (@i =< @x) {

以下代码在通过Visual Studio 2013的Web Essentials编译时产生错误。我认为该插件使用Winless,但在其他编译器上也失败了

.root {

    #namespace {

        .not-recursive(@x) {
            .margin-@{x} { margin: (1px * @x); }
        }

        .recursive(@x; @i: 0) when (@i =< @x) {
            .not-recursive(@i);
            .recursive(@x; (@i + 1) );
        }

    }

    /* This works */

    .sub-class {
        #namespace > .not-recursive(99);

        #namespace > .recursive(5);
    }

    /* Recursion fails */

    #namespace > .not-recursive(100);

    #namespace > .recursive(5);         // Why???

}
.root{
#名称空间{
.非递归(@x){
.margin-{x}{margin:(1px*@x);}
}
.recursive(@x;@i:0)当(@i=<@x){
.不是递归的(@i);
.递归(@x;(@i+1));
}
}
/*这很有效*/
.小班{
#命名空间>。非递归(99);
#名称空间>.recursive(5);
}
/*递归失败*/
#命名空间>。非递归(100);
#名称空间>.recursive(5);//为什么???
}
如果我注释掉最后一行,加上注释
为什么???
,它就会编译

如果我将
#namespace
放在
.root
之外,并且仍然使用
#namespace>.recursive()
它会编译

如果我必须大胆猜测的话,我会猜测它正在尝试在混入中调用
.root.recursive()
而不是
.root\namespace.recursive()
一次,但这仅仅是一个猜测,它只是在四处玩,看看什么有效/无效


这没什么大不了的,但它确实让我很困扰,我想知道我是否遗漏了文档中的某些内容或发现了新问题。

嗯,我确实认为这是一个bug。 但经过一些测试(“尝试和错误”),我找到了一个有效的解决方案:

.root {
    (...)
    // Problem solved.
    & { #namespace > .recursive(5); }
}

我想这只是一个bug。我建议文档应该提到名称空间应该在主作用域中定义。@Bass Jobsen,不,没有这样的要求。名称空间可以在任何地方定义(例如,名称空间内的名称空间等)。从技术上讲,名称空间只是一个普通的规则集,与其他任何规则集一样,它允许无限嵌套。啊,错误本身可以简化为,因此就变成了(尽管示例有点混乱)。似乎开发人员可以通过指定要遵循的特定约定来解决这个问题(例如@BassJobsen建议)但我想他们希望在没有任何看似武断的限制的情况下支持嵌套