最好的办法我可以描述多个值就是我要找的是向您展示失败代码迄今我已经试过:Case语句,在每个“当”阻止
case car
when ['honda', 'acura'].include?(car)
# code
when 'toyota' || 'lexus'
# code
end
我已经得到约4或5个不同的when
情况,应该由大约50个不同的可能值car
触发。有没有办法做到这一点与case
块,或者我应该尝试一个大块if
块?
最好的办法我可以描述多个值就是我要找的是向您展示失败代码迄今我已经试过:Case语句,在每个“当”阻止
case car
when ['honda', 'acura'].include?(car)
# code
when 'toyota' || 'lexus'
# code
end
我已经得到约4或5个不同的when
情况,应该由大约50个不同的可能值car
触发。有没有办法做到这一点与case
块,或者我应该尝试一个大块if
块?
在case
声明中,,
相当于if
语句中的||
。
case car
when 'toyota', 'lexus'
# code
end
您可能需要红宝石的 “图示” 或压扁语法的优势。
这使得长满了when
子句 - 如果我理解正确的话,你有大约10个值来测试每个分支 - 在我看来,它更具可读性。另外,您可以修改要在运行时测试的值。例如:
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
莫大的联系,谢谢! – Nick 2012-04-17 19:08:44
[此链接](http://ilikestuffblog.com/2008/04/15/how-to-write-case-switch-statements-in-ruby/)对Ruby中的case语句有更好的总结(它包括也是正则表达式和splat语法的例子)。 – rsenna 2013-02-20 18:59:20
我不知道为什么,但这种奇怪的情况发生: 当我写这篇文章: '时,“丰田”,“雷克萨斯”', 我得到: '意外tSTRING_BEG,期待keyword_do或“{”或' (”(的SyntaxError)' 然而,当我写这篇文章:。。。。 '当 “丰田”, “雷克萨斯”', 它的工作原理 唯一不同的是逗号后的空间 – 2014-11-10 08:23:27