coffescript中带开关的变量赋值

rox*_*xxy 5 javascript switch-statement coffeescript

如何在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"
Run Code Online (Sandbox Code Playgroud)

即使这不起作用

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

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

alert item.name + " : " + item.type
# alerts  "ahola : undefined"
Run Code Online (Sandbox Code Playgroud)

也试过这种方式

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

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

alert item.name + " : " + item.type
# alerts  "ahola : undefined"
Run Code Online (Sandbox Code Playgroud)

最后发现这也行不通

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

item.type = switch arr
 when true
   arr

alert item.name + " : " + item.type
# alerts  "ahola : undefined"
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

mu *_*ort 4

switchCoffeeScript有两种形式:

switch expr
  when expr1
    result1
  ...
  else
    default_result
Run Code Online (Sandbox Code Playgroud)

switch
  when expr1
    result1
  ...
  else
    default_result
Run Code Online (Sandbox Code Playgroud)

当然,这两种形式都是表达式,因此您可以说:

x = switch expr
  when val then result
  ...
Run Code Online (Sandbox Code Playgroud)

x = switch
  when expr then result
  ...
Run Code Online (Sandbox Code Playgroud)

switch expr就像 JavaScript switch:将 的结果expr与每个when表达式进行比较并执行when==结果expr。这种形式与switch以下相同:

if(expr == expr1)
  result1
else if(expr == expr2)
  result2
...
else
  default_result
Run Code Online (Sandbox Code Playgroud)

switch ... when表单执行第一个为 true 的when expr地方expr,因此这是一种奇特的表达方式:

if(expr1)
  result1
else if(expr2)
  result2
...
else
  default_result
Run Code Online (Sandbox Code Playgroud)

您的所有尝试似乎都试图混合这两种形式switch,并随之而来的混乱。

我想你正在寻找这样的东西:

arr = "coffee_script"
switch arr
  when 'coffee_script'
    item.type = arr
  ...
Run Code Online (Sandbox Code Playgroud)