我有以下ruby函数,当我称之为"deg_to_dir 270"时,case语句永远不会匹配,当它应该返回W.我一直在拉我的头发而没有将整个事物转换成IF语句我没有下一步.
def deg_to_dir deg
# used logic from http://www.csgnetwork.com/degrees2direct.html
d = deg.to_f
dir = "#{d}°"
case d
when d >= 0 && d <= 11.25,
d > 348.75 && d <= 360
dir = "N"
when d > 11.25 && d <= 33.75
dir = "NNE"
when d > 33.75 && d <= 56.25
dir = "NE"
when d > 56.25 && d <= 78.75
dir = "ENE"
when d > 78.75 && d <= 101.25
dir = "E"
when d > 101.25 && d <= 123.75
dir = "ESE"
when d > 123.75 && d <= 146.25
dir = "SE"
when d > 146.25 && d <= 168.75
dir = "SSE"
when d > 168.75 && d <= 191.25
dir = "S"
when d > 191.25 && d <= 213.75
dir = "SSW"
when d > 213.75 && d <= 236.25
dir = "SW"
when d > 236.25 && d <= 258.75
dir = "WSW"
when d > 258.75 && d <= 281.25
dir = "W"
when d > 281.25 && d <= 303.75
dir = "WNW"
when d > 303.75 && d <= 326.25
dir = "NW"
when d > 326.25 && d <= 348.75
dir = "NNW"
end
dir
end
Run Code Online (Sandbox Code Playgroud)
你要做的是一种if elsif模式.如果您尝试使用case when模式应该使用范围:
case d
when (0..11.25)
dir = "N"
when (11.25..33.75)
dir = "NE"
# etc...
end
Run Code Online (Sandbox Code Playgroud)
每次解析器在执行时都会出现case_statement === when_statement.所有when语句都计算为布尔值,它永远不会等于一个度数.