Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何将条件的多行形式转换为后缀形式?_Ruby_Postfix Notation - Fatal编程技术网

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])