2012-04-18 28 views
1

试过以下红宝石条件参数,如何检查零?

def pkill(process_name, *host) 
     puts host.nil? # => false 
     puts host.empty? # => true 
     puts host # => nil 
     puts host[0].nil? # => true 
    end 

现在如果我叫send("pkill", blah, nil),如何/为什么host假的?

很新的红宝石,所以保持平稳:)

回答

3

,因为它不是零,这是空数组。

def pkill(process_name, *host) 
    host.nil? # => false 
    host # => [] 
    host.empty? # => true 
end 

pkill 'blah' 
+0

都能跟得上:('host.empty?'也是假的... – Shrinath 2012-04-18 10:48:56

+0

然后你正在做别的事情。红宝石你是什么呢?我在1.9.3 – 2012-04-18 10:50:15

+0

红宝石1.8.7(2010-08-16 patchlevel 302)[x86_64-linux] – Shrinath 2012-04-18 10:51:49

1

你只是想让主机参数是可选的吗? *host的预期用途是如果您有可变数量的参数。例如,你的方法可以被称为像pkill('blah'),或pkill('blah', 'bloo')pkill('blah', 'bloo', 'bar')

如果你只是想说host不是必需的参数,你应该给它一个默认值。例如,你的方法可能成为

def pkill(process_name, host=nil) 
    puts host.nil? 
    puts host 
end 
+0

好点!得到一个+1 :) – 2012-04-18 11:17:36

+0

不能做,我希望它是零,如果我没有明确发送它... – Shrinath 2012-04-18 11:53:21

+0

这就是默认值。 – 2012-04-18 11:54:41