gpt4 book ai didi

ruby - 如何只选择一次运算符,而不是在循环中重复测试?

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:15 26 4
gpt4 key购买 nike

这是我要重构的内容:

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 移到 block 外,因为 side 的值在 block 内永远不会改变。由于唯一根据 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 设置为所需运算符的符号并在内部

result_items << item if ndx.public_send(oper, max)

(如果您仍然停留在 1.8,则必须使用 send 而不是 public_send)

关于ruby - 如何只选择一次运算符,而不是在循环中重复测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com