2014-05-14 37 views
4

如何使用coffescript中的賦值開關? 嘗試了很多方法,但無法使其工作。coffescript中的開關變量賦值

item = { name: "ahola" } 
arr = "coffee_script" 

switch arr 
when arr.match /script/ 
    item.type = arr 

alert item.name + " : " + item.type 
# alerts "ahola : undefined" 

即使這不工作

item = { name: "ahola" } 
arr = "coffee_script" 

switch arr 
when arr == "coffee_script" 
    item.type = arr 

alert item.name + " : " + item.type 
# alerts "ahola : undefined" 

試過這種方式也

item = { name: "ahola" } 
arr = "coffee_script" 

item.type = switch arr 
when arr.match /script/ 
    arr 

alert item.name + " : " + item.type 
# alerts "ahola : undefined" 

最後發現這也不起作用

item = { name: "ahola" } 
arr = "coffee_script" 

item.type = switch arr 
when true 
    arr 

alert item.name + " : " + item.type 
# alerts "ahola : undefined" 

我錯過什麼?

回答

3

有兩種形式的switch in CoffeeScript

switch expr 
    when expr1 
    result1 
    ... 
    else 
    default_result 

switch 
    when expr1 
    result1 
    ... 
    else 
    default_result 

兩種形式,當然,表達式,所以你可以說:

x = switch expr 
    when val then result 
    ... 

x = switch 
    when expr then result 
    ... 

switch expr就像是一個JavaScript switch:你比較expr每個when表達式的結果,並執行when==expr。的switch這種形式是一樣的:

if(expr == expr1) 
    result1 
else if(expr == expr2) 
    result2 
... 
else 
    default_result 

switch ... when形式執行第一when expr其中expr是真實的,因此是說的一個奇特的方式:

if(expr1) 
    result1 
else if(expr2) 
    result2 
... 
else 
    default_result 

您所有的努力似乎是試圖混合這兩種形式的switch並引發混淆。

我認爲你在尋找這樣的事情:

arr = "coffee_script" 
switch arr 
    when 'coffee_script' 
    item.type = arr 
    ... 
+0

好了,這是一個很好的解釋。謝謝。 – roxxypoxxy