15

如果尚未定义,是否可以将 LESS 变量设置为给定值?

我似乎只能为 SASS 找到解决方案。

4

1 回答 1

7

一个重要的评论:事实证明,对这种技巧的需求经常恰好是一个 XY 问题(由于误解了较少的变量语义)。通常没有真正需要的实际用例(在 Less 中,您总是定义一个默认值(因此它总是存在)以随意覆盖)。所以在使用下面的技巧之前,确保它不是你真正想要的东西


如果您需要为已经定义的相同范围(即全局或本地)提供此类变量,则非常简单(从 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;
}

但是,如果您尝试将其用于本地范围中使用的全局/父范围变量,则此方法将不起作用(如果您在不确定原始变量可能出现的范围时需要通用方法,这可能是一个问题从):

#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;
}

在那种情况下,我不知道任何直接的解决方案(例如,没有一些内联 javascript hacks 可以在保护表达式中使用)

于 2013-08-24T08:02:03.127 回答