Nic*_*ick 298 ruby syntax ruby-on-rails switch-statement
我可以描述我正在寻找的最好的方法是向您展示我迄今为止尝试过的失败代码:
case car
when ['honda', 'acura'].include?(car)
# code
when 'toyota' || 'lexus'
# code
end
Run Code Online (Sandbox Code Playgroud)
我有大约4或5种不同的when情况应该由大约50种不同的可能值触发car.有没有办法用case块来做这个或者我应该尝试一个大块if?
Cha*_*ell 644
在case声明中,a ,等同||于if声明.
case car
when 'toyota', 'lexus'
# code
end
Run Code Online (Sandbox Code Playgroud)
pil*_*row 97
您可以利用ruby的"splat"或flattening语法.
这会产生过度生长的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', ...]
...
end
case car
when *toyota
# Do something for Toyota cars
when *honda
# Do something for Honda cars
...
end
Run Code Online (Sandbox Code Playgroud)
另一种常见的方法是使用散列作为调度表,每个值的值car和值是一些可调用的对象,封装了您希望执行的代码.
| 归档时间: |
|
| 查看次数: |
111556 次 |
| 最近记录: |