确定一个variables是否在范围内?
我需要编写一个循环,执行如下操作:
if i (1..10) do thing 1 elsif i (11..20) do thing 2 elsif i (21..30) do thing 3 etc...
但是到目前为止,在语法方面已经走上了错误的道路。
如果i.between(1,10) 做事1 elsif i.between?(11,20) 做事2 ...
使用===
运算符(或其同义词include?
)
if (1..10) === i
正如@Baldu所说,使用===运算符或用例/当内部使用===:
case i when 1..10 # do thing 1 when 11..20 # do thing 2 when 21..30 # do thing 3 etc...
如果你仍然想使用范围…
def foo(x) if (1..10).include?(x) puts "1 to 10" elsif (11..20).include?(x) puts "11 to 20" end end
通常你可以通过如下方式获得更好的性能:
if i >= 21 # do thing 3 elsif i >= 11 # do thing 2 elsif i >= 1 # do thing 1
不是直接回答这个问题,但是如果你想相反的“内”:
(2..5).exclude?(7)
真正
一个更dynamic的答案,可以在Ruby中构build:
def select_f_from(collection, point) collection.each do |cutoff, f| if point <= cutoff return f end end return nil end def foo(x) collection = [ [ 0, nil ], [ 10, lambda { puts "doing thing 1"} ], [ 20, lambda { puts "doing thing 2"} ], [ 30, lambda { puts "doing thing 3"} ], [ 40, nil ] ] f = select_f_from(collection, x) f.call if f end
因此,在这种情况下,“范围”实际上只是用nils围起来以便捕捉边界条件。
你可以使用
if (1..10).cover? i then thing_1 elsif (11..20).cover? i then thing_2
而且根据Fast Ruby的这个基准是否比include?
速度更快include?
对于string:
(["GRACE", "WEEKLY", "DAILY5"]).include?("GRACE")
#=>真