Less 如果变量为';还没定

Less 如果变量为';还没定,less,Less,如果未定义,是否可以将较小的变量设置为给定值 我似乎只能找到一条重要的评论:事实证明,这种技巧的需要常常是一个XY问题(由于误解较少的变量语义)。通常情况下,没有真正的用例是您真正想要的(在较少的情况下,您总是定义一个默认值(因此它总是存在的)被随意覆盖)。因此,在使用下面的技巧之前,请确保它不是 如果您需要为已经定义的相同范围(即全局或局部)提供这样的变量,这非常简单(从v1.4.0开始): @bar: 41; // comment/uncomment to test .define-ba

如果未定义,是否可以将较小的变量设置为给定值


我似乎只能找到一条重要的评论:事实证明,这种技巧的需要常常是一个XY问题(由于误解较少的变量语义)。通常情况下,没有真正的用例是您真正想要的(在较少的情况下,您总是定义一个默认值(因此它总是存在的)被随意覆盖)。因此,在使用下面的技巧之前,请确保它不是


如果您需要为已经定义的相同范围(即全局或局部)提供这样的变量,这非常简单(从v1.4.0开始):

@bar: 41; // comment/uncomment to test

.define-bar-if-not-defined() {@bar: 42}
.define-bar-if-not-defined(); // exposes a variable only if it's not already in this scope

#using-global-bar {
    global-bar: @bar;
}

#using-local-bar {
    @bar: 43; // comment/uncomment to test
    .define-bar-if-not-defined();

    local-bar: @bar;
}
但是,如果您尝试将此方法用于局部范围中使用的全局/父范围变量,则此方法将不起作用(如果您不确定原始变量可能来自哪个范围而需要通用方法,则可能会出现问题):


在这种情况下,我不知道任何直接的解决方案(例如,在guard expression中使用一些内联javascript黑客)

无论出于何种原因,当在@import字符串中使用变量时,该方法都不起作用。编译器错误越少,说明变量未定义,即使您可以在样式定义中使用它。@cameron这是预期的,因为导入是在混合之前计算的。不管是哪种方式,到目前为止,我还没有看到任何需要这种功能的用例(我只是作为假设回答了这个问题)。对于此类设施的每一个请求通常都是由于误解了较少的变量通常是如何工作的(因此这是一个“XY问题”,有关更多详细信息,请参阅,等等)@Cameron,换句话说,如果你有一个特定的用例,你认为你需要这种技巧-发布它-我非常确信它可以通过更简单的方式解决,而不需要这样的黑客。
#using-unknown-bar-in-local-scope {
    // ... some code ...

    .define-bar-if-not-defined(); // won't override local @bar (if any) but always overrides global and parent scope @bar

    bar: @bar;
}