如何在Ruby中编写一个在when子句中包含多个语句的case语句?

oalqel3c  于 11个月前  发布在  Ruby
关注(0)|答案(4)|浏览(155)

我试着用逗号分隔when子句中的语句,但是没有用。
when 1; statement,statement,statement
when 2; statement,statement,statement
我在网上找不到这样的例子。

case selection
when 1
  system "clear"
  view_all_entries
  main_menu
when 2
  system "clear"
  create_entry
  main_menu
when 3
  system "clear"
  search_entries
  main_menu
when 5
  puts "Good bye!"
  exit(0)
else
  system "clear"
  puts "Sorry, that is not a valid input"
  main_menu
end

字符串

ar7v8xwq

ar7v8xwq1#

你的问题似乎是“我如何才能把所有这些语句放在一行上,从而减少行数”。
一般来说,你可以在ruby中使用“;”来代替End-of-Lines。因此:

case selection
when 1; system "clear"; view_all_entries; main_menu
...

字符串

case selection
when 1 then system "clear"; view_all_entries; main_menu
...


使用“;“在任何方面都不像ruby,不推荐使用。请参阅下面(其他答案),以获得更好的重构,它可以剥离重复的代码。

42fyovps

42fyovps2#

我倾向于这样写:

if selection==5
  puts "Good bye!"
  exit(0)
end

system "clear"

case selection
when 1 then view_all_entries
when 2 then create_entry
when 3 then search_entries
else        puts "Sorry, that is not a valid input"
end

main_menu

字符串

1zmg4dgp

1zmg4dgp3#

您可以使用when - then语法。请注意,如果行太长,则会被视为不好的做法:

case value
when 1 then statement1
when 2 then statement2
when 3 then statement3
when 4 then statement4
end

字符串
要在同一行上对同一条件执行多个语句,可以使用;分隔它们。然而,这总是被认为是一种不好的做法:

case value
when 1 then statement1; statement11; statement12
when 2 then statement2; statement21; statement22
when 3 then statement3; statement31; statement32
when 4 then statement4; statement41; statement42
end

krcsximq

krcsximq4#

我试过逗号,它不工作
是的,确实如此:

case value
when 1, 2
  "one or two"
else
  "something other than one or two"
end

字符串
如果value为1或2,则返回“one or two”

相关问题