2013-08-24 39 views

回答

7

一個重要的一句話:事實證明,需要這樣的伎倆很多時候恰好是一個XY-問題(如誤會很少變化的語義結果)。通常情況下,沒有真正的使用情況下,你真的想要這個(在你減少,而不是總是定義一個默認值(所以它總是存在)被隨意覆蓋)。所以在使用下面的技巧之前,請確保它不是something else you want actually


這是很簡單的(自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黑客可以用在警衛表達中)例如

+0

無論出於何種原因,這個方法在@導入字符串。儘管可以在樣式定義中使用它,但編譯器錯誤說明變量未定義。 – cameronhimself

+0

@cameronhimself這是預期的,因爲在mixin之前評估進口。無論哪種方式,到目前爲止,我沒有看到任何需要這種功能的用例(我只是將這個問題作爲一個假設來回答)。對於這種設施的每一個請求通常都是誤解變量變量工作的結果(因此這是一個「XY問題」,更多細節參見[#1400](https://github.com/less/less)。 js/issues/1400),[#1706](https://github.com/less/less.js/issues/1706)等)。 –

+0

@cameronhimself換句話說,如果你有一個特定的用例,你認爲你需要這種技巧 - 發佈它 - 我很確定它可以用更簡單的方法解決這個問題。 –