我正在运行ruby 1.9.2p180(2011-02-18修订版30909)[x86_64-linux].
#!/usr/bin/env ruby
def ouch()
raise ArgumentError, "woof"
fred = 3
return( nil )
ensure
if ( defined?( fred ) ) then
printf( "fred is defined (%s)\n", fred.inspect() )
else
printf( "fred is not defined\n" )
end
end # ouch()
ouch()
Run Code Online (Sandbox Code Playgroud)
运行时,上面的ruby脚本的输出是非常意外的.
$ ./ouch.rb
fred is defined (nil)
./ouch.rb:4:in `ouch': woof (ArgumentError)
from ./ouch.rb:22:in `<main>'
Run Code Online (Sandbox Code Playgroud)
所以引发加注/异常,fred没有被设置为3,但是它被定义并设置为nil,从而使得定义的?()的测试失败了.这非常令人困惑.这是一个错误吗?显然,定义的测试需要遵循测试而不是零.
如果这不是一个错误,有人可以解释为什么不呢?
ruby ×1