ruby - 如何将条件的多行形式转换为后缀形式?
问题描述
这是条件语句的多行形式:
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
?
解决方案
我建议使用 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
推荐阅读
- javascript - 自动平滑向下滚动页面
- docker - 带有 Dockerfile 的“部署到 Heroku”按钮
- oracle-apex - 如何删除 Oracle APEX 中的主明细行?
- speech-recognition - 寻找 STT 和 TTS API
- php - 如何根据php中的键过滤和设置优先级数组
- javascript - 初始化所有 tinyMCE 编辑器后如何设置回调执行?
- android - 如何在 Android Studio 中恢复旧的提交对话框窗口?
- sql-server - 尝试在整数上使用 LIKE 运算符
- assembly - i386/x64 pop FS/GS 指令支持一种变体,它将 SP 增加 32 位或 64 位而不是 16 位。它是干什么用的?
- python - Heroku Django图像未加载