Ruby on rails assert\u not\u nil foo==是否定义了assert?Ruby的Test::Unit中的foo?
我是Ruby/Rails测试新手。似乎Test::Unit方法assert_not_nil foo是真的,只要定义了foo,即它不是nil。对吧? 那么assert_不是等同于assert定义的吗?福 如果没有,它们有何不同?如果是的话,有什么理由我会选择其中一个而不是另一个 也许更一般地说,assert似乎可以与其他表达式相结合,以代替assert_equal和assert_not等更专门的断言方法。但似乎专门的方法更标准。是这样吗?为什么会这样?nil是一个值,因此定义了一个值为nil的变量。下面是一些要演示的repl输出:Ruby on rails assert\u not\u nil foo==是否定义了assert?Ruby的Test::Unit中的foo?,ruby-on-rails,ruby,unit-testing,assertion,testunit,Ruby On Rails,Ruby,Unit Testing,Assertion,Testunit,我是Ruby/Rails测试新手。似乎Test::Unit方法assert_not_nil foo是真的,只要定义了foo,即它不是nil。对吧? 那么assert_不是等同于assert定义的吗?福 如果没有,它们有何不同?如果是的话,有什么理由我会选择其中一个而不是另一个 也许更一般地说,assert似乎可以与其他表达式相结合,以代替assert_equal和assert_not等更专门的断言方法。但似乎专门的方法更标准。是这样吗?为什么会这样?nil是一个值,因此定义了一个值为nil的变量
[1] pry(main)> a = nil
=> nil
[2] pry(main)> defined? a
=> "local-variable"
[3] pry(main)> defined? b
=> nil
您可能会感到困惑,因为访问未定义的实例变量也会返回nil,但这仍然不同:
[4] pry(main)> defined? @b
=> nil
[5] pry(main)> @b = nil
=> nil
[6] pry(main)> defined? @b
=> "instance-variable"
全局变量$foo在这方面与实例变量类似,但访问未初始化的类变量@@bar会引发NameError
最后一件事:在Ruby中,局部变量是在解析时声明的,因此,如果方法的任何分支设置了一个局部变量,则该局部变量在方法或块中的任何位置都被定义并初始化为nil。那么,如果foo=nil,那么assert\u not\u nil foo在assert定义时为false?福是真的。正当