Ruby 如何只选择一个操作符,而不是在循环中重复测试?
以下是我试图重构的内容:Ruby 如何只选择一个操作符,而不是在循环中重复测试?,ruby,Ruby,以下是我试图重构的内容: items.each_与_索引do| item,ndx| 如果边==:左 条件=ndx=max 结束 结果(u)项目= 结束 items.each_与_索引do| item,ndx| 结果项目检查“proc”和“lambda”。它们使您能够保存对匿名函数的引用,例如: [4] pry(main)> func = proc {|left, right| left < right} => #<Proc:0x34c83c0@(pry):4>
items.each_与_索引do| item,ndx|
如果边==:左
条件=ndx<最大值
其他的
条件=ndx>=max
结束
结果(u)项目=
结束
items.each_与_索引do| item,ndx|
结果项目检查“proc”和“lambda”。它们使您能够保存对匿名函数的引用,例如:
[4] pry(main)> func = proc {|left, right| left < right}
=> #<Proc:0x34c83c0@(pry):4>
[5] pry(main)> func.call(4,5)
=> true
[6] pry(main)> func.call(5,2)
=> false
我没有检查代码,可能有一些输入错误。运算符只是方法:
ndx.public_send(:<=, max)
(如果你仍然坚持使用1.8,你将不得不使用send
而不是public\u send
)如果我理解你的意图,另一种方法可能是使用take
和drop
:
result_items = if side == :left
items.take max
else
items.drop max
end
如果您可以稍微调整一下此逻辑,您也可以实现相同的功能,如:
items.each_with_index do |item, ndx|
# assuming it to be Fixnum since you are using index value
result_items << item if (max - ndx).abs >= 0
end
items.each_与_索引do| item,ndx|
#假设它是Fixnum,因为您使用的是索引值
结果\u项=0
结束
在Ruby 1.9或更高版本上对问题的最佳直接回答,您应该真正养成使用public\u send
而不是send
来匹配正常方法调用行为的习惯(即不绕过private
)。否则,在存在private
方法的情况下,重构后的循环将具有与原始循环不同的行为。最佳重构。谢谢
result_items << item if ndx.public_send(oper, max)
result_items = if side == :left
items.take max
else
items.drop max
end
items.each_with_index do |item, ndx|
# assuming it to be Fixnum since you are using index value
result_items << item if (max - ndx).abs >= 0
end