в рубине, почему не определяется? работает, как и следовало ожидать, при использовании с sure

Я использую ruby ​​1.9.2p180 (18.02.2011, версия 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()

При запуске вывод вышеупомянутого скрипта ruby ​​довольно неожиданный.

    $ ./ouch.rb 
     fred is defined (nil)
    ./ouch.rb:4:in `ouch': woof (ArgumentError)
            from ./ouch.rb:22:in `<main>'

Таким образом, происходит повышение / исключение, fred не получает значение 3, но он определяется и устанавливается в ноль, тем самым побеждая тест на определено? (). Это очень сбивает с толку. Это ошибка? Очевидно тест за определенными должны следовать тестирование не на ноль.

Если это не ошибка, может ли кто-нибудь объяснить, почему бы и нет?

6
задан eclectic923 7 August 2011 в 17:57
поделиться