1

如果我必须使用除非/如果和块,代码可能会变得很长。这看起来一点也不好看,我的问题是如何处理这种情况,正确的格式是什么,例如在这种假设的情况下?

if some_array.each.all? {|argument| argument.method_one == @some_value} && another_array.method_two == @completely_different_value

    #
    #some stuff here
    #

end
4

3 回答 3

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
于 2013-03-01T07:02:02.373 回答
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

提取到方法中的优点是您的代码通常更容易测试。

于 2013-03-01T12:37:57.617 回答
0

有很多方法可以完成您的任务。

最常见的方法是在 shell 提示符下使用反斜杠:

if some_array.each.all? { |argument| \
    argument.method_one == @some_value \
  } \
  && another_array.method_two == @completely_different_value \

 puts a
end  

您也可以在 s 处静默换行dot(点必须放在Ruby < 1.9的行尾或Ruby 1.9+ 的下一行的开头。)

"foo bar baz".
  reverse.
  split.
  map(&:capitalize).
  join ' '
# ⇒ "Zab Rab Oof"
于 2013-03-01T07:38:10.120 回答