我写过这样的东西,我从Visual Basic 6.0中知道的if-else逻辑,但我确信有更好的“Ruby方式”来编写它。
你能告诉我Ruby世界的样子吗?
if params[:medication_name].nil?
med_name = 'all'
elsif params[:medication_name] == 'undefined'
med_name = 'all'
else
med_name = params[:medication_name]
end
答案 0 :(得分:7)
有几种不同的方法可以简化这一点,例如:
med_name = params[:medication_name]
med_name = 'all' if med_name.nil? or med_name == 'undefined'
答案 1 :(得分:4)
对于你的情况,这样的事情:
med_name = params[:medication_name]
med_name = 'all' if [nil, 'undefined'].include? med_name
对于if
/ elsif
/ else
的更一般的长链,请查看case
statements。在这种情况下他们是矫枉过正,但这是一个例子:
med_name = case params[:med_name]
when 'undefined', nil
'all'
else
params[:med_name]
end
答案 2 :(得分:2)
Ruby独有:
med_name = {nil=>'all', 'undefined'=>'all'}[params[:medication_name]] || params[:medication_name]
答案 3 :(得分:1)
你可以这样做:
val = [nil, 'undefined'].include?(params[:medication_name]) ? "all" : params[:medication_name]
答案 4 :(得分:1)
使用case
语句是一种Ruby友好的方式。如果您正在检查一个值,则可以执行以下操作:
case params[:medication_name]
when nil?
med_name = 'all'
when 'undefined'
med_name = 'all'
else
med_name = params[:medication_name]
end
另一种方法是测试多个值:
foo = true
bar = false
case
when foo == true
puts "foo is true"
when foo == false
puts "foo is false"
when bar == true
puts "bar is true"
when bar == false
puts "bar is false"
else
puts "foo and bar are neither true or false!"
end