以下是我试图重构的内容:
items.each_with_index do |item, ndx|
if side == :left
condition = ndx < max
else
condition = ndx >= max
end
result_items << item if condition
end
我希望能够将if/else/end移到块外部,因为
side
的值在块内部不会改变。因为基于side
值的唯一变化是运算符,所以我希望能够执行如下操作:if side == :left
oper = <
else
oper = >=
end
items.each_with_index do |item, ndx|
result_items << item if ndx oper max
end
但当然,因为语法的原因,这是行不通的。
有没有什么方法可以储存一个接线员,或者更好的方法来完成我的任务?
最佳答案
运算符只是方法:
ndx.public_send(:<=, max)
与
ndx <= max
所以在循环外设置
oper
到所需运算符的符号,在循环内设置send
到所需运算符的符号result_items << item if ndx.public_send(oper, max)
(如果您仍然停留在1.8上,则必须使用
public_send
而不是)