私はRubyでリフレクションメソッドを使用しようとしていて、本当に魅力的な振る舞いをしています。なぜModule.methods()とrespond_toですか?スクリプトとは違ってirbで動作しますか?
次の例では、IRBに異なる動作をするようだと、Rubyスクリプトと呼ばれるとき:
例1:IRBでは
def myfun; end
p respond_to?(:myfun)
、これは '真' と言い、スクリプトで : '偽の' 。
例2:IRBで
ml = methods
def myfun; end
p methods - ml
、これは言う[:myfunはつぎ]。 スクリプト中:[]。
私はこれを1.8,1.9 MRI、JRuby 1.5.6などで見つけました。これは正常だと思います。
なぜ違いがありますか?
私はかなり 'respond_to'でしたか?メソッドが利用可能かどうかを確認する方法です - なぜ上のケースでは機能しないのですか?
Rubyの長年の暴露後に私はこれに遭遇していないことは驚くべきことです。はい、私はIRBが一般に公開している理由に興味があります。 :)私はなぜ彼らがプライベートであるのかを見ることができます - "def f; end; class A; end; A.new.f"などのような混乱を避けるためですか? – inger
私もこれを知って驚いた。 –
@セミオンなぜ 'irb'メソッドが公開されているのか説明できますか?そしてなぜ「irb」の中で「myfun」と「self.myfun」が同じ方法を指しているのでしょうか? – codeit