Ruby 删除 Case 语句中的隐式中断? (如何制作像 Switch 一样的外壳)

标签 ruby switch-statement

x='bob'
case x
when "bob"
puts 'it stops here'
when 'bob'
puts 'but i want it to stop here'
end

有没有办法让 case 语句表现得像 vanilla switch?这样它会在爆发前循环遍历所有“时间”?我很惊讶 ruby​​ 的行为几乎与 elsif 相同。

最佳答案

迈克尔,

虽然您的示例有点误导(“bob”同时匹配“bob”和“bob”,因此第一种情况总是匹配),但您可以像下面的 if_test 方法一样使用简单的 if :

def case_test(x)                                                  
  puts case
  when x > 3
    "ct: #{x} is over 3"
  when x > 4
    "ct: #{x} is over 4"
  end   
end     

case_test(4)
case_test(5)

def if_test(x)
  puts "it: #{x} is over 3" if x > 3
  puts "it: #{x} is over 4" if x > 4
end     

if_test(4)
if_test(5)

这会产生:

ct: 4 is over 3
ct: 5 is over 3
it: 4 is over 3
it: 5 is over 3
it: 5 is over 4

请注意,您还可以在 when 中使用多个语句,这可能对您有帮助或没有帮助,具体取决于您的实际用例:

def many(x)              
  case x                 
  when 'alice','bob'     
    puts "I know #{x}"
  else·                  
    puts "I don't know #{x}"                                      
  end                    
end                      

many('alice')            
many('bob') 
many('eve')

产量:

I know alice
I know bob
I don't know eve

关于Ruby 删除 Case 语句中的隐式中断? (如何制作像 Switch 一样的外壳),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10759344/

相关文章:

mysql - 在 Fedora 上安装 MySQL gem 时出现问题

ruby - 我怎样才能让这个 ruby 代码抛出异常并保释?

java - 在 Java Android 中使用 Switch/Case 语句的更简单方法

在 Switch 语句中转换 IF 语句

java - 如何在 switch case 语句中匹配多个输入值?

javascript - 从其他 Controller 访问我的 Action 编辑

ruby-on-rails - Ruby on Rails 表单 : how to create a CheckBox Table (or List)

javascript - 是否有可能以某种方式缩短 switch 语句?也许有一个循环?

android - 如何添加取决于 ListView 中 TextView 文本的 ImageView

ruby-on-rails - 列必须出现在 GROUP BY 子句中或用于聚合函数 Ruby