更少的递归错误 - 从包含命名空间调用嵌套命名空间中包含的递归混合会产生"is undefined"



以下代码在通过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???
}

如果我用注释Why???注释掉最后一行,它就会编译。

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

如果非要我大胆猜测的话,我猜它试图在混音中调用.root .recursive()而不是.root #namespace .recursive()一次,但这只是一个基于四处玩耍的猜测,看看什么有效/无效。

这不是什么大不了的事,但它真的困扰着我,我想知道我是在文档中遗漏了什么,还是发现了新问题。

嗯,我确实认为这是一个bug。但经过一些测试("试错"),我找到了一个可行的解决方案:

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

相关内容

  • 没有找到相关文章

最新更新