如何在Ruby中的when子句中编写带有多个语句的case语句?

hoc*_*ode 0 ruby

我尝试用逗号分隔when子句中的语句,但是它不起作用。

当1; 陈述声明陈述

当2; 陈述声明陈述

我在网上找不到任何示例。

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
Run Code Online (Sandbox Code Playgroud)

ndn*_*kov 5

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

case value
when 1 then statement1
when 2 then statement2
when 3 then statement3
when 4 then statement4
end
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)


Ano*_*noE 5

您的问题似乎是“如何将所有这些语句放在一行上以减少行数”。

通常,您可以使用“;” 在红宝石中替换行尾。从而:

case selection
when 1; system "clear"; view_all_entries; main_menu
...
Run Code Online (Sandbox Code Playgroud)

要么

case selection
when 1 then system "clear"; view_all_entries; main_menu
...
Run Code Online (Sandbox Code Playgroud)

使用 ”;” 无论如何,都不是像红宝石一样,推荐使用。参见下面的更好的重构,它去除了重复的代码。


Car*_*and 5

我倾向于这样写:

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
Run Code Online (Sandbox Code Playgroud)