如果我必须使用除非/ if和block,代码可能会变得非常长。这看起来并不好看,我的问题是如何处理这种情况,什么是正确的格式,例如在这个时髦的案例中?
if some_array.each.all? {|argument| argument.method_one == @some_value} && another_array.method_two == @completely_different_value
#
#some stuff here
#
end
答案 0 :(得分:1)
您可以将它分成几行。我认为这种格式更容易阅读
result1 = some_array.each.all? { |argument| argument.method_one == @some_value }
result2 = another_array.method_two == @completely_different_value
if result1 && result2
#
#some stuff here
#
end
答案 1 :(得分:0)
有很多方法可以完成你的任务。
最常见的方法是在shell提示符中使用反斜杠:
if some_array.each.all? { |argument| \
argument.method_one == @some_value \
} \
&& another_array.method_two == @completely_different_value \
puts a
end
你也可以默默地在dot
处断开这一行(必须在行中位于<&lt; 1.9或开头 ) >在Ruby 1.9 +中的下一行>。)
"foo bar baz".
reverse.
split.
map(&:capitalize).
join ' '
# ⇒ "Zab Rab Oof"
答案 2 :(得分:0)
我建议将零件提取到变量
condition1 = some_array.each.all? do |argument|
argument.method_one == @some_value
end
condition2 = another_array.method_two == @completely_different_value
if condition1 && condition2
#
# some stuff here
#
end
或将条件纳入方法
def condition1?(arr)
arr.some_array.each.all? do |argument|
argument.method_one == @some_value
end
end
def condition2?(arr)
arr.method_two == @completely_different_value
end
if condition1?(some_array) && condition2?(another_array)
#
# some stuff here
#
end
提取到方法的优势在于您的代码通常更容易测试。