Case语句在每个'when'块中有多个值

我可以描述我正在寻找的最好的方法是向您展示迄今为止我尝试过的失败的代码:

case car when ['honda', 'acura'].include?(car) # code when 'toyota' || 'lexus' # code end 

when大约50种不同的可能的car价值应该触发的情况下,我已经有了大约4或5种不同的情况。 有没有办法做到这一点的case或者我应该尝试一个巨大的, if块?

3 Solutions collect form web for “Case语句在每个'when'块中有多个值”

在一个case语句中,a是||的等价物 在if语句中。

 case car when 'toyota', 'lexus' # code end 

Ruby case语句可以做的其他一些事情

你可能会利用ruby的“splat”或扁平化语法。

when条款when会长满 – 如果我理解正确的话,你有大约10个值来testing每个分支 – 在我看来,可读性更强一些。 另外,您可以修改要在运行时testing的值。 例如:

 honda = ['honda', 'acura', 'civic', 'element', 'fit', ...] toyota = ['toyota', 'lexus', 'tercel', 'rx', 'yaris', ...] ... if include_concept_cars: honda += ['ev-ster', 'concept c', 'concept s', ...] ... case car when *toyota # Do something for Toyota cars when *honda # Do something for Honda cars ... end 

另一种常见的方法是使用一个散列作为一个调度表,每个值的car和值是一些可调用的对象封装你想要执行的代码。

把你的逻辑放在数据中的另一个好方法是这样的:

 # Initialization. CAR_TYPES = { foo_type: ['honda', 'acura', 'mercedes'], bar_type: ['toyota', 'lexus'] # More... } @type_for_name = {} CAR_TYPES.each { |type, names| names.each { |name| @type_for_name[type] = name } } case @type_for_name[car] when :foo_type # do foo things when :bar_type # do bar things end 
  • Rails 4 LIKE查询 - ActiveRecord添加引号
  • 为什么要求运行'rake db:migrate RAILS_ENV = test'?
  • Rails迁移:self.up和self.down与变化
  • ActiveRecordcallback和validation的顺序是什么?
  • 如何创build锚点并将其redirect到Ruby on Rails中的特定锚点
  • Post.all.map(&:id)是什么意思?
  • 将现有的html.erb转换为Haml
  • 在Rails中采集和采集有什么区别?
  • 在大型Rails应用程序中加速RSpectesting
  • 在本地Rails开发环境中获取真实的IP地址
  • 如何在没有模板的情况下使用rails发送邮件?