这是一种具有默认值的switch
语句:
def test(st)
[[2, 'info'],
[3, 'warning'],
[4, 'danger'],
[5, 'success']].detect(Proc.new{[nil, 'default']}){|el| el[0]==st}[1]
end
如何使这句话更紧凑?
我不喜欢几件事:
[nil, 'default']
,而不是简单'default'
Proc.new
答案 0 :(得分:1)
使用Hash
数据结构并利用方法#fetch
def test(st)
{ 2 => 'info', 3 => 'warning',
4 => 'danger',5 => 'success'
}.fetch(st,'default')
end
以下是文档: -
从给定键的哈希值返回一个值。如果找不到密钥,则有几个选项:没有其他参数,它将引发
KeyError
异常;如果给出默认,那么将返回;如果指定了可选代码块,那么将运行该代码块并返回其结果。
答案 1 :(得分:1)
您可以使用哈希使其直接查找值。然后,您还可以通过将default
传递到new
来利用哈希的默认值功能。
def test(st)
map = Hash.new('default')
map.merge!({
2 => 'info',
3 => 'warning',
4 => 'danger',
5 => 'success'
})
map[st]
end
我还建议你只在map
方法之外的某个位置创建test
哈希值,每次调用test
时都不会创建它。