if array1.present?
method_call(array1[:ids])
end
if array2.present?
method_call(array2[:ids])
end
如何使上述代码更简单或一行?
答案 0 :(得分:1)
[array1, array].select(&:present?)
.map { |a| a[:ids] }
.each(&method(:method_call))
答案 1 :(得分:0)
在ruby中有很多方法可以做这种事情。这是一个:
[array1, array2].compact.each do |array|
method_call(array[:ids])
end
compact
会将nils
从数组中删除。
...替代地
[array1, array2].each do |array|
method_call(array[:ids]) if array
end
编辑:单行?
[array1, array2].compact.each {|a| method_call(a[:ids]) }
虽然我应该指出,如果那些实际上是数组,那么:id
不是有效的索引。如果它们是哈希值,则此示例更有意义。
答案 2 :(得分:0)
这可能是相同的,但有点简单,
[array1, array2].each do |a|
method_call(a[ids]) if a.present?
end
答案 3 :(得分:0)
我认为您的代码非常好,因为它易于阅读和理解。因此,我不确定它是否会因为缩短而改善。
如果我不得不更改代码(也许我们的示例只是一长串方法调用和条件的一部分),我会考虑:
重新排序方法调用和条件
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)