2014-10-17 61 views
0

我定义一个只有一个参数的方法:有没有办法将输入参数设置为一系列值?

def numbers(int) 

end 

我想这对评估值范围的参数条件语句:

def numbers(int) 
    if # int != (1,2,3,4,5,6,7,8,9,10) (not legal Ruby) 
    puts "Cats" 
    end 
end 

在这种情况下,如果int是不等于123456789,或10puts "Cats"

例子:

def numbers(11) => "Cats" 

我怎样才能建立一个范围内也是这样吗?我试过!= (1..10),但那不起作用。

回答

2

您可以使用Range S:

def numbers(int) 
    puts 'Cats' unless (1..10).include? int 
end 

numbers 11 
# Cats 

.....运营商用于创建范围的文字。前者包含最后一个值,后者则不包含它。

1..10  # inclusive range; corresponds to the [1,10] interval 
1...10 # exclusive range; corresponds to the [1,10) interval 
+0

而Rails中,你也可以这样写:'INT .in?(1..10)' – spickermann 2014-10-17 02:12:21

+0

无聊,但要做到这一点。 – 2014-10-17 02:56:32

0
def numbers(int) 
    case int 
    when 1..10 
    else 
    puts "Cats" 
    end 
end 
5

只是因为:

def numbers(i) 
    puts "Cats" unless (1..10) === i 
end 

numbers(3) 
numbers(11) 
    #=> Cats 
numbers(0) 
    #=> Cats 
+0

这比我的更直接。 – sawa 2014-10-17 03:07:15

+1

@sawa,你认为我在哪里得到了这个想法? – 2014-10-17 03:19:50

1

另一个(更易读)的方式来做到这一点是通过使用between

def numbers(int) 
    puts 'Cats' unless int.between?(1, 10) 
end 

numbers(3) 
numbers(11) 
    #=> Cats 
numbers(0) 
    #=> Cats 
相关问题