Ruby 如何将条件的多行形式转换为后缀形式?
这是一种多行形式的条件语句:Ruby 如何将条件的多行形式转换为后缀形式?,ruby,postfix-notation,Ruby,Postfix Notation,这是一种多行形式的条件语句: if button_down?(@buttons[:forward]) and @speed < @max_speed @speed += @acceleration elsif button_down?(@buttons[:backward]) and @speed > -@max_speed @speed -= @acceleration end 如何以正确的方式实现这一点?如果总是使用,我怀疑我是否理解你所说的“高效”,但在这种情况下,
if button_down?(@buttons[:forward]) and @speed < @max_speed
@speed += @acceleration
elsif button_down?(@buttons[:backward]) and @speed > -@max_speed
@speed -= @acceleration
end
如何以正确的方式实现这一点?如果总是使用
,我怀疑我是否理解你所说的“高效”,但在这种情况下,我会选择:
@speed +=
case
when button_down?(...) then @acceleration
when button_down?(...) then -@acceleration
else 0
end
甚至:
@speed += @acceleration *
case
when button_down?(...) then 1
when button_down?(...) then -1
else 0
end
我建议使用case语句和helper方法来干燥代码
@speed +=
case
when satisfy?(:forward, @speed) then @acceleration
when satisfy?(:backward, -@speed) then -@acceleration
else 0
end
def satisfy?(direction, speed)
button_down?(direction) && speed < @max_speed
end
@速度+=
案例
当满足时(:前进,@速度),然后是@加速度
当满足时(:向后,-@速度),然后-@加速度
其他0
结束
def(方向、速度)
按钮向下(方向)和速度<@max\u速度
结束
我可能会将一些逻辑提取到单独的方法中:
def increase_speed
@speed = [@max_speed, @speed + @acceleration].min
end
def decrease_speed
@speed = [-@max_speed, @speed - @acceleration].max
end
使用这些方法,您可以编写如下内容:
increase_speed if button_down?(@buttons[:forward])
decrease_speed if button_down?(@buttons[:backward])
嗯,它不是特别有效。它只是更干净,我喜欢它。lol。请定义“高效”。对于elsif
,没有后缀形式。如果没有意义的话,它是有的。这看起来很有希望!
def increase_speed
@speed = [@max_speed, @speed + @acceleration].min
end
def decrease_speed
@speed = [-@max_speed, @speed - @acceleration].max
end
increase_speed if button_down?(@buttons[:forward])
decrease_speed if button_down?(@buttons[:backward])