【问题标题】:conditional parameters in ruby, how to check for nil?ruby中的条件参数,如何检查nil?
【发布时间】:2012-04-18 10:43:48
【问题描述】:

尝试了以下

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 如何/为什么是假的??

对 ruby​​ 很陌生,所以保持流畅:)

【问题讨论】:

    标签: ruby-on-rails ruby optional-parameters


    【解决方案1】:

    因为不是nil,所以是空数组。

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

    【讨论】:

    • 那你在做别的事情。你在什么红宝石上?我在 1.9.3
    • ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
    • 嗯,它已经很老了。可以升级吗?
    • 那么,这是该版本中的错误还是什么?
    • 我已安装 1.8.7p358 并检查。结果是一样的。尝试升级到此补丁级别。
    【解决方案2】:

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

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

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

    【讨论】:

    • 这就是默认值的作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2020-07-01
    • 2013-10-14
    • 2014-09-30
    相关资源
    最近更新 更多