ruby - 如何改进嵌套条件
问题描述
你能帮我改进这些代码吗?
def print_last_frame(result, frame, i)
line = ''
if frame.strike?
if frame.result.reduce(:+) == 30
line += "X\t X\t X"
elsif frame.result.reduce(:+) == 20
line += "X\t #{frame.result[1]}\t /"
else
line += "X\t #{frame.result[1]}\t #{frame.result[2]}"
end
elsif frame.spare?
if frame.result.reduce(:+) == 20
line += "#{frame.result[0]}\t /\t X"
else
line += "#{frame.result[0]}\t /\t #{frame.result[2]}"
end
else
line += "#{result.shots[i]}\t #{result.shots[i+1]}"
end
line
end
我担心条件
解决方案
我的第一个想法是:使用带有Hash#default的 Hash :
line = ""
strike = {20 => "20", 30 => "30"}
strike.default = "other"
line += strike[0]
line
#=> "other"
没有测试,但你应该能够写出类似的东西
def print_last_frame(result, frame, i)
result = frame.result
shots = result.shots
cases = {
strike: {20 => "X\t #{result[1]}\t /",
30 => "X\t X\t X"},
spare: {20 =>"#{result[0]}\t /\t X"}
cases[:strike].default = "X\t #{result[1]}\t #{result[2]}"
cases[:spare].default = "#{result[0]}\t /\t #{result[2]}"
cases.default = {}
cases.default.default = "#{shots[i]}\t #{shots[i+1]}"
cases[frame.value][result.sum]
end
无论是frame.value
退货:strike
,:spare
还是nil
。
推荐阅读
- wordpress - 如何完成 Wordpress 查询以按元值和日期对结果进行排序
- java - 如何使用 Java 获取存储在 Secure Credentials Vault (SCV) 中的证书(.jks 文件)
- css - 背景过滤器在 iOS 上不起作用/影响定位?
- amazon-web-services - 詹金斯不是只在我的笔记本电脑上打开浏览器吗?
- visualization - PCL Visualizer:拾取/选择线条和其他形状
- python - 如何修复无法在 Conda 上加载本机 Tensorflow 运行时
- google-drive-api - 如何从 google drive api 获取资源密钥
- python - 可以抓取标签内所有数据的正则表达式
- github - 从 Jenkins Job 将更改推送到 Github
- ocaml - OCaml 流水线和类型构造函数参数