这听起来可能有些奇怪,但我很乐意做这样的事情:
case cool_hash
when cool_hash[:target] == "bullseye" then do_something_awesome
when cool_hash[:target] == "2 pointer" then do_something_less_awesome
when cool_hash[:crazy_option] == true then unleash_the_crazy_stuff
else raise "Hell"
end
理想情况下,我甚至不需要再次引用HAS,因为这就是案例语句所涉及的内容。如果我只想使用一个选项,那么我会“case Cool_hash[:That_Option]”,但我想使用任意数量的选项。另外,我知道Ruby中的Case语句只计算第一个True条件块,有没有办法覆盖它来计算每个True块,除非有中断?
4条答案
按热度按时间yfwxisqw1#
您还可以使用lambda:
6mzjoqzu2#
您的代码非常接近有效的Ruby代码。只需删除第一行的变量名,将其更改为:
但是,无法重写CASE语句来计算多个块。我认为您想要的是使用
if
语句。使用return
而不是break
跳出该方法。kb5ga3dv3#
我认为,遵循是做你想做的事情的更好的方式。
即使在Case的Else部分中,如果有更多条件,也可以使用‘Case Cool_Hash[:CrawOption]’而不是‘If’。我更喜欢在这种情况下使用‘if’,因为只有一个条件。
7fhtutme4#
在Ruby 3.0中,您可以使用pattern matching执行以下操作
你可以做到的
会回来的
在Ruby 2.7中,它仍然有效