【问题标题】:Testing for undefined variables in Ruby a la JavaScript?在 Ruby 和 JavaScript 中测试未定义的变量?
【发布时间】:2009-05-20 16:29:35
【问题描述】:

在 JavaScript 中,有一种有用的方法可以测试从未在任何给定点定义的变量。例如,如果未定义变量 bob,则以下代码 sn-p 将返回 true

typeof(bob)=='undefined'

如何在 Ruby 中完成相同的测试?

编辑:我正在寻找一个本质上同样紧凑的测试。我已经使用异常等提出了一些尴尬的近似值,但这些不是很漂亮!

【问题讨论】:

    标签: javascript ruby undefined


    【解决方案1】:
    defined?(variable_name)
    
    irb(main):004:0> defined?(foo)
    => nil
    irb(main):005:0> foo = 1
    => 1
    irb(main):006:0> defined?(foo)
    => "local-variable"
    

    这是一个很好的write up

    【讨论】:

    • 呵呵,谁知道会这么容易。我正在做类似的事情:test = begin does_not_exist rescue NameError "undefined" end
    • 有趣的定义? blah 返回 nil 而不是 false 并返回一个类型的字符串(如果已定义)
    • 还有一些其他选项,例如 object.instance_variable_defined?(:var_name)。在文档中搜索定义?你会发现更具体的版本。
    • nil 是错误的。你可以做'if defined?(blah)'
    • 我意识到这看起来很奇怪,因为“?”在方法结束时。我会假设一个布尔返回,而是得到一个 nil 或一个字符串
    【解决方案2】:

    defined? 是一个函数,如果项目未定义,则返回 nil。

    defined? somevar
    => nil
    somevar = 12
    defined? somevar
    => "local-variable"
    

    所以:

    if defined?(somevar)
      do_something
    end
    

    【讨论】:

      【解决方案3】:

      记住定义了吗?如果定义了变量,则返回一个字符串,否则返回 nil,因此对其结果使用条件检查。我认为语法暗示它将返回一个布尔值。

      【讨论】:

      • 是的,但是因为 'nil' 是假的并且所有的字符串都是真的,你可以将返回值当作布尔值来处理所有的流控制目的(if、elsif、unless、while、until 等) .
      【解决方案4】:

      所有用例:

      defined? ur_variable
      => nil
      
      ur_variable= 12
      defined? ur_variable
      => "local-variable"
      
      another_variable = nil
      defined? another_variable
      => "local-variable"
      

      【讨论】:

        【解决方案5】:

        也可以这样测试。

           if somevar.nil
                # not set do something
            else
                # is set do something else
            end
        

        【讨论】:

        • 不。 “nil”和“undefined”表示两种不同的东西。
        • 如果定义?(variable_to_test) == nil puts "variable_to_test is undefined" else puts "variable_to_test is defined" end => variable_to_test is undefined variable_to_test = "" if defined?(variable_to_test) == nil puts "variable_to_test is undefined" else puts "variable_to_test is defined" end => variable_to_test is defined 似乎应该有更直接的方法?
        • 抱歉,尝试以正确的格式重新发布,但失败了。稍后
        猜你喜欢
        • 2011-12-18
        • 2016-08-10
        • 2011-11-26
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多