如何摆脱if conditional
中的重复?
def set_caption(result)
if result.respond_to?(:app_name)
content_tag(:div, result.type_name, class: 'type-name') +
content_tag(:div, result.app_name, class: 'app-name')
else
content_tag(:div, result.type_name, class: 'type-name')
end
end
答案 0 :(得分:1)
这对你有用吗?
def set_caption(result)
rv = content_tag(:div, result.type_name, class: 'type-name')
if result.respond_to?(:app_name)
rv += content_tag(:div, result.app_name, class: 'app-name')
end
rv
end
答案 1 :(得分:-2)
def set_caption(result)
[:type_name, *(:app_name if result.respond_to?(:app_name))]
.map{|name| content_tag(:div, result.send(name), class: name.hyphenize)}
.inject(:+)
end
或者,假设result.respond_to?(:type_name)
始终为真:
def set_caption(result)
[:type_name, :app_name]
.map{|name| if result.respond_to?(name)
content_tag(:div, result.send(name), class: name.hyphenize)
end}.compact.inject(:+)
end