質問

私は新しいルビー、なんかトラブルを理解するかの例外を問題なった。僕のruby-aaws逸品へのアクセスAmazon ECS: http://www.caliban.org/ruby/ruby-aws/.このクラスアマゾン::ドキュメントのイベント:Error:

module Amazon
  module AWS
    # All dynamically generated exceptions occur within this namespace.
    #
    module Error
      # An exception generator class.
      #
      class AWSError
        attr_reader :exception

        def initialize(xml)
          err_class = xml.elements['Code'].text.sub( /^AWS.*\./, '' )
          err_msg = xml.elements['Message'].text

          unless Amazon::AWS::Error.const_defined?( err_class )
            Amazon::AWS::Error.const_set( err_class,
                    Class.new( StandardError ) )
          end

          ex_class = Amazon::AWS::Error.const_get( err_class )
          @exception = ex_class.new( err_msg )
        end
      end
    end
  end
end

こだerrorcodeのように AWS.InvalidParameterValue, この作品の制作その例外変動)新しいクラス Amazon::AWS::Error::InvalidParameterValue るクラスのサブクラス StandardError.

これが変わっている。しているのか教えてくださいコードは以下のようなものです:

begin
  do_aws_stuff
rescue Amazon::AWS::Error => error
  puts "Got an AWS error"
end

また、この do_aws_stuff 投げ NameError, 私の救済のブロックがトリガされます。このアマゾン::ドキュメントのイベント::Errorを発生さんのスーパークラスの発生するエラーからのモジュールはサブクラスすることはできるのでしょうか?確かばん:

irb(main):007:0> NameError.new.kind_of?(Amazon::AWS::Error)
=> true

という true, から干の混乱をもたらすでしょうが、特にこうした:

irb(main):009:0> NameError.new.kind_of?(Amazon::AWS)
=> false

今後、どうかの別ドキュメントのイベントの誤差からその他のタイプのエラー?きましたようなもの:

begin
  do_aws_stuff
rescue => error
  if error.class.to_s =~ /^Amazon::AWS::Error/
    puts "Got an AWS error"
  else
    raise error
  end
end

そうな非常にjanky.エラーをスローされないクラスAWSErrorで作られてい上げのようになります:

error = Amazon::AWS::Error::AWSError.new( xml )
raise error.exception

その例外を探している rescue からの発生する例外タイプのみからは継承しStandardError.

明らかにしてい質問:

  1. 理由は定義がどこにも、Ruby築の例外は、 kind_of?(Amazon::AWS::Error), であるモジュール?
    回答: あったかい include Amazon::AWS::Error 上のファイル、まったようJavaの輸入またはC++が含まれています。こうした追加もで定義され Amazon::AWS::Error (現在-未来)の暗黙のカーネルのクラスは、上位クラスのクラスです。この意味 という kind_of?(Amazon::AWS::Error).

  2. たいのですがベストを識別する動的に作成された例外 Amazon::AWS::Error からランダムなどの例外ですから?

役に立ちましたか?

解決

Okんを支援していきま

最初のモジュールではないクラスでできるミックスの振る舞いができます。第二に、以下の例:

module A
  module B
    module Error
      def foobar
        puts "foo"
      end
    end
  end
end

class StandardError
  include A::B::Error
end

StandardError.new.kind_of?(A::B::Error)
StandardError.new.kind_of?(A::B)
StandardError.included_modules #=> [A::B::Error,Kernel]

kind_of?分かるのがあり、エラーが持つすべてのA:B::エラー行動については通常ていA:B::Errorを発生しないすべての行動から::Bをおこなっておりませんので、A:B種類。(鴨タイピング)

現在はそれだけではありません非常に良い機会になることruby-ドキュメントのイベント館のスーパークラスの定義がどこにも、アマゾン::ドキュメントのイベント:エラーあります。(猿パッチング)

また、このサイトではprogramaticallyのモジュールが含まれているとの階層は、以下の

class Class
  def has_module?(module_ref)
    if self.included_modules.include?(module_ref) and not self.superclass.included_modules.include?(module_ref)                      
        puts self.name+" has module "+ module_ref.name          
    else
      self.superclass.nil? ? false : self.superclass.has_module?(module_ref)
    end        
  end
end
StandardError.has_module?(A::B::Error)
NameError.has_module?(A::B::Error)

に関する第二の問題が見えないことに気づいたものより

begin 
#do AWS error prone stuff
rescue Exception => e
  if Amazon::AWS::Error.constants.include?(e.class.name)
    #awsError
  else
    whatever
  end 
end

編集--上記のコードな作業としては:名モジュールの接頭辞がない場合の定数をarrays.ぜお、libのmaintainerのAWSErrorクラス。ファクトリクラスのロードいて:/)

思っていたルビー-ドキュメントのイベントのcalibanサイトによって視界が遮られ、当社のファイアウォールな試験ります。

について:というものをやってい猿継ぎのStandardError上位の階層となります。いうものが、そのrootファイル以外は毎のコンテキストを含むモジュールオブジェクトのオブジェクト形式のメタクラス.(このような出来事が起きないようにと、IRB、デフォルトのコンテキストオブジェクトからないのでファイル)

から 嘴モジュール :

A couple of points about the include statement before we go on. First, it has nothing to do with files. C programmers use a preprocessor directive called #include to insert the contents of one file into another during compilation. The Ruby include statement simply makes a reference to a named module. If that module is in a separate file, you must use require to drag that file in before using include.

編集--いることもできるでしょうコメントをブラウザ:/ロイヤ用ロックプラットフォーム)

他のヒント

もういいですね:

Class.new( StandardError )

は新しいクラスStandardErrorとしての基底クラスではなく、アマゾン::ドキュメントのイベント::Errorを発生させます。で定義されるモジュールはなぜですkind_of?Amazon::ドキュメントのイベント::エラーになります。しかしなkind_of?Amazon::ドキュメントのイベントでもモジュールな巣を目的kind_of??

申し訳わかんないモジュールとルビーが、ほとんどの基底クラスではStandardError.

更新:ちなみに、 からrubyのdocs:

obj.kind_of?(クラス)=>trueまたはfalse

場合にtrueを返しまクラスは、objのクラスの場合、またはクラスのスーパークラスのobj又はモジュールが含まれてobj.

<url> <url> <url> <url> <url> <url> <url> <url> <url> <url>チャイム:ここのバグはlibのコードです。でも読み:

      unless Amazon::AWS::Error.const_defined?( err_class )
        kls = Class.new( StandardError )
        Amazon::AWS::Error.const_set(err_class, kls)
        kls.include Amazon::AWS::Error
      end

課題のひとつだ走る Amazon::AWS::Error::AWSError になります。時 raise "と呼ばれるものですが最初のパラメータに対応 exception 方法を採用していますので、その結果です。があるので、そちらもぜひラスのサブクラス Exception 戻り、なかでもイラクやシリアの exception はできない raise Exception.new("Something is wrong").

この場合、 AWSErrorexception 設定した属性リーダーを定義します値に初期化さないで Amazon::AWS::Error::SOME_ERROR.これを呼び出すときは raise Amazon::AWS::Error::AWSError.new(SOME_XML) Rubyて、最終的に呼び出し Amazon::AWS::Error::AWSError.new(SOME_XML).exception 今のインスタンスを返しま Amazon::AWS::Error::SOME_ERROR.からご指摘がありましたように、他の応答者に、このクラスは直接サブクラス StandardError 代わりに、クラスのサブクラス共通のアマゾンエラーになります。これまでは整流、ジャンソリューションで最高のベット。

いる説明しますのんのコンプライアンス-

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top