Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails assert\u not\u nil foo==是否定义了assert?Ruby的Test::Unit中的foo?_Ruby On Rails_Ruby_Unit Testing_Assertion_Testunit - Fatal编程技术网

Ruby on rails assert\u not\u nil foo==是否定义了assert?Ruby的Test::Unit中的foo?

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的变量

我是Ruby/Rails测试新手。似乎Test::Unit方法assert_not_nil foo是真的,只要定义了foo,即它不是nil。对吧?

那么assert_不是等同于assert定义的吗?福

如果没有,它们有何不同?如果是的话,有什么理由我会选择其中一个而不是另一个

也许更一般地说,assert似乎可以与其他表达式相结合,以代替assert_equal和assert_not等更专门的断言方法。但似乎专门的方法更标准。是这样吗?为什么会这样?

nil是一个值,因此定义了一个值为nil的变量。下面是一些要演示的repl输出:

[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?福是真的。正当