如果elsif else或在Ruby块中重构 def main_方法 新的_数组=[] 有些是数组,每个都是foo| 如果(方法01?foo)| |(方法02?foo)| |(方法03?foo)| |(方法04?foo)| |(方法05?foo) 其他的 新的_数组
在不了解您的具体用例的情况下,很难找到替代如果elsif else或在Ruby块中重构 def main_方法 新的_数组=[] 有些是数组,每个都是foo| 如果(方法01?foo)| |(方法02?foo)| |(方法03?foo)| |(方法04?foo)| |(方法05?foo) 其他的 新的_数组,ruby,refactoring,Ruby,Refactoring,在不了解您的具体用例的情况下,很难找到替代|的方法,但是可以使用#reject对迭代进行大量清理: def main_method some_array.reject do |foo| method_01?(foo) || method_02?(foo) # ... etc. end end #reject将向块生成每个成员并返回一个数组,该数组仅包含返回false的成员。换句话说,只有那些将false返回到所有方法1-5的成员。这样做可能会有帮助吗 我已经更新了在两组上拆分数
|
的方法,但是可以使用#reject
对迭代进行大量清理:
def main_method
some_array.reject do |foo|
method_01?(foo) || method_02?(foo) # ... etc.
end
end
#reject
将向块生成每个成员并返回一个数组,该数组仅包含返回false
的成员。换句话说,只有那些将false
返回到所有方法1-5的成员。这样做可能会有帮助吗
我已经更新了在两组上拆分数组的答案
更简洁的方式:
checkers = (1..5).map {|i| "method_%02d" % i} # too lazy ;)
new_array = some_array.select {|e| !checkers.any? {|m| e.send m}}
仍然非常可读和明显。这不是仍然有圈复杂度吗,因为它在块中包含
|
?它将如何处理else
条件?非常感谢。在您的示例中,else
条件为空,因此我认为您不需要它。代码的复杂性至少与您的需求一样复杂。您的要求似乎是返回一个数组,其中成员向所有5个方法返回false
。您需要在某个地方|
所有这些结果,所以请明确说明!看起来你颠倒了逻辑。我认为他想要所有的元素,其中没有一个方法返回true<代码>[false,false]。选择{e}[:method01,:method02]。无?{m | send(m,e)}在所有函数调用完成后,您如何处理else
部分?@JonasElfström是正确的,您需要使用any?
而不是none?
@БааСа而不是创建一个新数组。这会过滤原始数组以返回您正在查找的元素。这是一个更为惯用的Ruby。每个方法(方法01?、方法02?…)都包含一个计算,该计算编辑foo
,并将其添加回new\u数组
,如果没有匹配的方法,则将元素添加到new\u数组
定义具有副作用的问号方法实际上是一种实践,即,在其本地方法范围之外更改数据。这通常是出乎意料的,可能会在以后给你带来很多悲伤。
checkers = (1..5).map {|i| "method_%02d" % i} # too lazy ;)
new_array = some_array.select {|e| !checkers.any? {|m| e.send m}}