2013-08-24 9 views

答えて

7

重要な発言を見つけるように見えることができます:それは、そのようなトリックの必要性が非常に頻繁に(少ない変数の意味を誤解した結果として)XY-問題であることを起こることが判明しました。通常、実際の使用はありません。実際にはこれを使用する場合があります(少ない場合はとなります)。はデフォルト値を定義します。下のトリックを使用する前に、それがsomething else you want actuallyでないことを確認してください。


あなたはそれがすでに定義することができ、同じスコープ(すなわちグローバルまたはローカル)のために、このような変数を提供する必要がある場合には(1.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これは、インポートがミックスインの前に評価されるためです。いずれにしても、これまでのところ、そのような機能性が必要とされるようなユースケースは見当たりませんでした(私はちょっと疑問に答えました)。そのような施設に対するすべてのリクエストは、Less変数が一般的にどのように機能するかを誤解した結果になります(詳細については、「XY問題」を参照してください(https://github.com/less/less)。 js/issues/1400)、[#1706](https://github.com/less/less.js/issues/1706)など)。 –

+0

@cameronhimself言い換えれば、この種のトリックが必要だと思う具体的なユースケースがある場合は、それを投稿してください。このようなハッキングをはるかに簡単に解決できると確信しています。 –

関連する問題