2013-08-24 9 views

답변

7

중요한 발언을 찾을 수가 있습니다 : 그것은 같은 트릭의 필요성이 매우 자주 (이하 변수 의미를 오해의 결과로)는 XY-문제 될 일이 밝혀졌습니다. 일반적으로 실제로 사용하지 않는 경우가 있습니다. 실제로 덜 원하는 경우 항상은 기본값 (따라서 항상 존재하므로)을 재정의 할 수 있습니다. 따라서 아래의 트릭을 사용하기 전에 something else you want actually이 아닌지 확인하십시오.

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

을하지만이 : 이미 정의 할 수 있습니다 위치를 (즉, 전역 또는 로컬) 같은 범위에 대한 이러한 변수를 제공해야하는 경우


이 (v1.4.0이 이후) 매우 간단합니다 메서드는 로컬 범위에서 사용되는 전역/부모 범위 변수에 사용하려고하면 작동하지 않습니다. 원래 변수가 어떤 범위에서 왔는지 알 수 없을 때 일반 메서드가 필요한 경우 문제가 될 수 있습니다. :

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

그런 경우 어떤 직설적 인 해결책을 모르는 경우 (예 : 가드 표현식에서 사용할 수있는 인라인 자바 스크립트 해킹이없는 경우)

+0

@ 내부에서 변수를 사용할 때 어떤 이유로이 방법이 작동하지 않습니다. 가져 오기 문자열. 스타일 정의에서 변수를 사용할 수 있다고하더라도 컴파일러 오류로 인해 변수가 정의되지 않습니다. – cameronhimself

+0

@cameronhimself 이것은 수입품이 mixins보다 먼저 평가되기 때문에 예상됩니다. 어쨌든, 지금까지는 그러한 기능이 전혀 필요하지 않은 유스 케이스를 보았습니다 (나는 단지 hypothetic 한 질문으로 대답했습니다). 이러한 시설에 대한 모든 요청은 일반적으로 Less 변수가 일반적으로 작동하는 방식에 대한 오해의 결과로 바뀝니다 (따라서 "XY 문제"입니다. 자세한 내용은 [# 1400] (https://github.com/less/less) 참조). js/issues/1400), [# 1706] (https://github.com/less/less.js/issues/1706) 등). –

+0

@cameronhimself 다른 말로하면, 당신이 이런 종류의 트릭을 필요로한다고 생각하는 특정한 유스 케이스가 있다면 - 나는 그것을 훨씬 쉽게 쉽게 해킹 할 수 있다고 확신한다. –

관련 문제