2017-01-17 1 views
-2

RubyのObjectに関する情報が必要です。コンソールでは、多くの "Module1"が置かれています。なぜこうなった?なぜ私はそんなに "Module1"を見ているのですか?私はこのコードを使用しようとしています:Rubyオブジェクトに関する情報

class Object 
     def method_missing(*args) 

     puts 'Module1' 
     super 
     end 
    end 
+0

'puts 'Module1''をより有益な出力に置き換えることができます。例えば、' 'Kernel#caller''(http://ruby-doc.org/core-2.4.0/Kernel.html#method -i-caller) 'method_missing'(おそらくIRB)を呼び出すクラスやメソッドを確認します。 – Stefan

+0

_Sidenote:_オブジェクト#method_missingを、特に間違った署名で再定義することは非常に悪い考えです。 – mudasobwa

+0

また、 'Object'に定義されたメソッドがない場合、' super'は多分助けにはならないでしょう。 IRBやPRYを使用しているため、非常に多くの 'Module1'が表示されます。これらはRubyではありません。 –

答えて

1

これは、ルビーがメソッドをどのように参照するかと関係があります。それは先祖の木を2回横断する。最初にメソッド名を探し、2番目にmethod_missingを探しました。

ほとんどのオブジェクトはObjectから継承していますので、method_missingObjectが呼び出されるのは珍しいことではありません。

あなたが興味を持っている場合、これを詳しく説明する多くのリソースがあります。 This is a good one

関連する問題