2014-05-19 5 views
0
{let $first: 10 /} // this is a single line soy comment 
    {if $first > 5 } 
    {$first}<br/> 
    {let $first:$first-1 /} 
    {/if} 
{$first} 

간장 템플릿에 값을 수정할 수 없습니다, 그것은 인쇄 : 10 10내가이 시도

을 이상적으로 인쇄해야합니다 : 10 9 ..

당신의 무엇이 잘못되었는지 확인하시기 바랍니다 수 있습니까 암호?

답변

3

우선, 실제로는 $first의 값을 덮어 쓸 수 없습니다. documentation 상태 변수 let에 의해 정의 된 상태 변수는 수정할 수 없습니다. 이는 let으로 값의 별칭을 만들 때마다 컴파일 된 출력에 새 변수가 만들어지기 때문입니다. 또한 간장 표현의 범위 지정 규칙은 Javascript와 동일하지 않습니다 (그러나 {let}은 ECMAScript 6의 let 문과 비슷한 의미를 갖는 것으로 생각할 수 있습니다. 즉, 논이 아닌, 블록 범위). 코드에서

:

{let $first: 10 /}   /* 1 */ 
{if $first > 5} 
    {$first}<br/> 
    {let $first¹: $first-1 /} /* 2 */ 
          /* 3 */ 
{/if} 
{$first}      /* 4 */ 

무엇이 일어나고있는 것은 :

  • 에서 (1), $first는 값 10의 별칭입니다. 이 값을 보유하기위한 변수가 도입되었습니다.

  • (2)

    오른손 : 그것은 부모 블럭에서 정의되기 때문에$first는, (1)에서 그 값을 취한다.

    왼손 :$first 따른 값으로 별칭되는 $first¹ - 1 = 10 - $first 정의 덮어 쓸 수 없으므로 1 = 9, 새로운 변수를 도입하고, 다른 (1) . 참고 사항은 다음 두 가지입니다.

    a. $first¹의 값은 9이지만, 결코이 코드 조각에서 읽습니다.

    b. $first¹ 정의 된 블록, 즉 {if...} 안에있는 블록 내에 만 "수명"이 있습니다. 당신이 {if} 블록에 의해 도입 된 범위를 벗어난 것으로 $first¹ (3), 그것은 것 출력 9

  • 에서 (4), 가치 {$first}를 삽입한다면 사실, 더 이상 읽을 수 없습니다 , 그래서 $first from (1)은 유일하게 보이고, 10을 산출합니다. 이것은 컴파일 된 출력에서 ​​(1)과 같은 변수를 사용합니다.