Ruby on rails 如何合并以下两个if条件?
如何使上述代码更加简单或一行?在ruby中有很多方法可以实现这类功能。这里有一个:Ruby on rails 如何合并以下两个if条件?,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何使上述代码更加简单或一行?在ruby中有很多方法可以实现这类功能。这里有一个: if array1.present? method_call(array1[:ids]) end if array2.present? method_call(array2[:ids]) end compact将nils从数组中取出 或者 [array1, array2].compact.each do |array| method_call(array[:ids]) end 编辑:一行 [ar
if array1.present?
method_call(array1[:ids])
end
if array2.present?
method_call(array2[:ids])
end
compact
将nils
从数组中取出
或者
[array1, array2].compact.each do |array|
method_call(array[:ids])
end
编辑:一行
[array1, array2].each do |array|
method_call(array[:ids]) if array
end
尽管我应该指出,如果这些实际上是数组,那么
:id
不是有效的索引。如果它们是散列,那么这个例子就更有意义了。这可能是相同的,但要简单一点
[array1, array2].compact.each {|a| method_call(a[:ids]) }
我认为您的代码非常好,因为它易于阅读和理解。因此,我不确定是否可以通过缩短它来改善 如果我必须更改代码(也许我们的示例只是方法调用和条件列表的一部分)我会考虑:
- 重新排序方法调用和条件
[array1, array].select(&:present?) .map { |a| a[:ids] } .each(&method(:method_call))
- 或引入助手方法:
method_call(array1[:ids]) if array1.present? method_call(array2[:ids]) if array2.present?
array1
是一个数组,那么array1[:ids]
将导致错误。如果只是两个列表,则保持原样。这种方式比当前的命题更具可读性。[]当前?==如果[]
#⇒ 错误
。您还更改了语义。
method_call(array1[:ids]) if array1.present?
method_call(array2[:ids]) if array2.present?
def call_method(array)
method_call(array[:ids]) if array.present?
end
call_method(array1)
call_method(array2)