0

我有一个方法可以返回 1 - 100 之间的数字

取决于响应 (x) 是否在 100 - 90 之间,我想要一个响应,89 - 85 另一个 84 - 72 另一个......等等

我用

if x > 90
 response a
elsif x > 85
 response b
elsif etc...

但这似乎有点混乱,有没有更好的重构方法?

非常感谢。

4

2 回答 2

6

利用Range#===并使用case语句:

case x
when 72..84
  # Do something
when 85..89
  # Do something
when 90..100
  # Do something
else
  # Do something when no matches
end
于 2012-12-09T19:29:45.867 回答
3

您可以尝试一个表(a Hash),其中键是范围,值是您要返回的数字:

T = { 
  (90..100) => 1,
  (85..89) => 2,
  # and so on
}

(r,v) = T.find {|r,v| r.member? x}

if v then 
  return v
else
  # x wasn't in any of the defined ranges
end
于 2012-12-09T19:26:09.633 回答