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 
  • 非永久ActiveRecord模型属性
  • 在Rails 3中设置会话超时
  • Wkhtmltopdf单行中的字符在页面之间部分切割
  • 在GIT中处理Rails db / schema.rb文件的正确方法是什么?
  • Heroku Postgres错误:PGError:错误:关系“组织”不存在(ActiveRecord :: StatementInvalid)
  • bundle exec rake是什么意思?
  • Post.all.map(&:id)是什么意思?
  • Ruby on Rails - 对于xxx / xxxx / xxxx,无法将“\ x89”从ASCII-8BIT转换为UTF-8
  • 在销毁之前进行validation
  • 找不到JavaScript运行时。 有关可用运行时的列表,请参阅https://github.com/sstephenson/execjs。 (ExecJS :: RuntimeUnavailable)
  • PG未定义错误关系用户不存在