モジュールで定義されている構造(メソッド、定数など)を調べるにはどうすればよいですか?モジュールの検査方法
require 'observer'
があるとしましょう。私は「オブザーバー」内で定義されているすべてを見たいと思います。どうやって?
モジュールで定義されている構造(メソッド、定数など)を調べるにはどうすればよいですか?モジュールの検査方法
require 'observer'
があるとしましょう。私は「オブザーバー」内で定義されているすべてを見たいと思います。どうやって?
あなたはプライを使用する場合は、単に
ls
ls ModuleName
は、特定のモジュールまたはクラスまたはインスタンスの使用可能なすべてのメソッドとインスタンス変数を示していません。てこについての詳細:http://pryrepl.org/
それとも、別の答えが述べているようにinstance_variablesに
を取得するためにinstance_methods
ModuleName.instance_variables
を取得するために
ModuleName.instance_methods
を行うことができ、それがに(脆性の方法で、まだなんとか)はほとんど不可能ですrequire
こんにちは、この種の実装自体はbrです。あなた自身のモジュールとあなたがAPIを完全にコントロールしていない限り、エラーが発生しやすくなります。しかし、まだ良い考えではありません。
短い答え:絶対確実ではありません。
長い答え:これは、Rubyがコアで非常に動的な言語であり、require
文が行う可能性のあることにほとんど制約を課さない方法の製品です。任意の数のモジュールとクラスをライブラリで作成することができ、これらをきちんとまとめてグループ化する必要はありません。
定義済みのすべてのクラスとメソッドを必要とする前にスナップショットを作成し、追加されたものを見つけるために別のものを取得しても、それらをすべて取得したという保証はありません。いくつかのクラスは、require
ステートメントが終了した後に読み込まれたり、定義されたりすることがあります。
最も良い方法は、ソースを読み取ることです。 がである可能性がある、さまざまなモジュールとクラスが、コードによってトリガーされていない場合でも定義されます。
methods
のような反射ツールが助けになりますが、それはまた誤解を招くほどです。メソッドは後で定義することができます。コードをより完全に表示して表示する必要があります。
検査するモジュールの外側からObserver
メソッドを実行したいとします。あなたが何をするかの例がここにあります。
module Observer
def self.show_all(mod)
puts "owner of methods = #{mod.methods(false)}"
puts "owner of instance methods = #{mod.instance_methods(false)}"
puts "instance variables = #{mod.instance_variables}"
puts "ancestors = #{mod.ancestors}"
puts "included modules = #{mod.included_modules}"
end
end
module A
module B
include Comparable
@a = 1
def self.b; end
def c; end
module C
end
end
end
Observer.show_all(A::B)
# owner of methods = [:b]
# owner of instance methods = [:c]
# instance variables = [:@a]
# ancestors = [A::B, Comparable]
# included modules = [Comparable]
class D; end
class E<D; end
class F<E
include Comparable
@a = 1
def self.e; end
def f; end
end
Observer.show_all(F)
# owner of methods = [:e]
# owner of instance methods = [:f]
# instance variables = [:@a]
# ancestors = [F, Comparable, E, D, Object, Kernel, BasicObject]
# included modules = [Comparable, Kernel]
質問が間違っていると分かりません。
このようにして、Module
のプロパティを読み取ることができます。
例:
第一バージョン:
require "nokogiri"
p Nokogiri.methods # It will print for you all methods in that Module,
# also available methods from ruby.
セカンドバージョン
x = require "nokogiri"
p x.methods #available methods there private, public, protected methods and etc...
p x.private_methods # prints bunch of private methods, [:Nokogiri]
'puts'または' inspect'が、残念ながら、表示されません。 –
あなたの質問は不明です。あなたはモジュールではなく、ファイルを 'require'します。ファイルの内容を見たい場合は、ファイルを開いて印刷するだけです。 –