coffeescript中带开关的变量赋值

时间:2014-05-14 18:56:37

标签: javascript coffeescript switch-statement

如何在coffescript中使用switch进行分配? 尝试了很多方法,但无法使其发挥作用。

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"

我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

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 ==exprswitch的这种形式与:

相同
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
  ...