如何在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方式,必须用方括号括起来似乎是不难的。也许我错了。干杯:)