Ruby 删除 Case 语句中的隐式中断?(如何使案例像开关)


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

有没有办法让案例陈述表现得像香草开关?这样它就会在爆发之前循环所有"何时"?我很惊讶红宝石的行为几乎与elsif相同。

Michael,

虽然您的示例有点误导("bob"与"bob"和"bob"匹配,因此第一种情况始终匹配),但您可以使用简单的 if 就像下面的方法if_test

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

No.Case 语句评估第一个when块,其目标的 === 方法在通过比较时计算结果为 true,并就此停止。

相关内容

  • 没有找到相关文章

最新更新