小编ecl*_*923的帖子

在红宝石中,为什么没有定义?与确保一起使用时可以预期的工作

我正在运行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

6
推荐指数
1
解决办法
114
查看次数

标签 统计

ruby ×1