首页 > 解决方案 > 如何将条件的多行形式转换为后缀形式?

问题描述

这是条件语句的多行形式:

if button_down?(@buttons[:forward]) and @speed < @max_speed
  @speed += @acceleration 
elsif button_down?(@buttons[:backward]) and @speed > -@max_speed
  @speed -= @acceleration
end

我想将其转换为后缀形式:

@speed += @acceleration if button_down?(@buttons[:forward]) and @speed < @max_speed
@speed -= @acceleration elsif button_down?(@button[:backward]) and @speed > -@max_speed

上面的代码提出:

syntax error, unexpected keyword_elsif, expecting end-of-input

如何以正确的方式做到这一点?总是一起去if

标签: rubypostfix-notation

解决方案


我建议使用 case 语句和辅助方法来干燥代码。

@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

推荐阅读