如何在ruby(1.9)case语句中使用返回值进行多重赋值?

如何在ruby(1.9)case语句中使用返回值进行多重赋值?,ruby,switch-statement,variable-assignment,Ruby,Switch Statement,Variable Assignment,这样做很好: q = case period_group when 'day' then [7, 'D'] when 'week' then [7, 'WW'] else ['12','MM'] end limit,pattern = q[0],q[1] 但我的第一次尝试: limit, pattern = case period_group when 'day' then 7, 'D' when 'week' then 7, 'WW' else '12','M

这样做很好:

q = case period_group
  when 'day' then [7, 'D'] 
  when 'week' then [7, 'WW'] 
  else ['12','MM']
end
limit,pattern = q[0],q[1]
但我的第一次尝试:

limit, pattern = case period_group
  when 'day' then 7, 'D' 
  when 'week' then 7, 'WW' 
  else '12','MM'
end
最终导致语法错误:

syntax error, unexpected ',', expecting keyword_end
      when 'day' then 7, 'D' 

我遗漏了什么吗?

您应该为此返回数组。否则会混淆解析器

limit, pattern = case period_group
  when 'day' then [7, 'D'] 
  when 'week' then [7, 'WW'] 
  else ['12','MM']
end

我不明白你为什么要去掉方括号。这样更容易阅读。

您忘记将返回值放在[]中

limit, pattern = case period_group
  when 'day' then [7, 'D']     
  when 'week' then [7, 'WW']     
  else ['12','MM']    
end  

谢谢现在我看到了好的编辑。我会在可能的时候投票给你答案,因为这不是平行作业。关于混淆:解析器需要一个值或一系列语句,后跟
end
。用逗号列出的值两者都不是。阅读好的问题。我的第一次尝试是平行作业;我认为把=符号放在'case'关键字之前可以使它符合并行赋值的条件。但我同意,它确实更具可读性。是的,在您的第一个示例中有一个并行赋值(
limit,pattern=q[0],q[1]
)。但是当你试图涉及一个
案例
表达式时,它就不再是一个了。顺便说一句,您可以简单地编写
limit,pattern=q
。事实上,如果意图(在=)反映在编写返回值的语法中,则更像是ruby方式,必须用方括号括起来似乎是不难的。也许我错了。干杯:)