ただ残念ながら、ソースファイルを探す方法を見つけることができませんでした。
今回は探し方を調べている間に見つけたメソッドや変数が、どこかで役に立つかもしれないのでメモしておきます。
説明は、ほぼリファレンスのコピーです。
■superclassメソッド
親クラスを調べるメソッドです。
戻り値はクラス(Classオブジェクト)です。
親クラスがわかってもどのファイルに書いてあるかはわかりませぬ。
■__FILE__変数戻り値はクラス(Classオブジェクト)です。
親クラスがわかってもどのファイルに書いてあるかはわかりませぬ。
現在のソースファイル名です。
フルパスとは限らないため、フルパスが必要な場合は File.expand_path(__FILE__) とする必要があります。
実行しているファイル名は調べられそうですが、クラスがどのファイルに書かれているかはわからなそうです。
■$0、$PROGRAM_NAME組み込み変数フルパスとは限らないため、フルパスが必要な場合は File.expand_path(__FILE__) とする必要があります。
実行しているファイル名は調べられそうですが、クラスがどのファイルに書かれているかはわからなそうです。
現在実行中の Ruby スクリプトの名前を表す文字列です。
では試しに__FILE__と$PROGRAM_NAMEを使ってみます。
(Test1.rb)
puts __FILE__ puts $PROGRAM_NAME
$ ruby Test1.rb Test1.rb Test1.rb
実行したファイル名が表示されました。
■$:、$LOAD_PATH組み込み変数
rubyがロードするファイルのディレクトリやロードしたファイルを調べる方法です。
これもMacクラスがどのファイルに書かれているかはわかりません。
Kernel.#load や Kernel.#require がファイルをロードする時に検索するディレクトリのリストを含む配列です
以下は、ロードパスをコマンドラインから調べる方法です。
実行してみると、このようにパスが表示されます。
■$"、$LOADED_FEATURES組み込み変数これもMacクラスがどのファイルに書かれているかはわかりません。
Kernel.#load や Kernel.#require がファイルをロードする時に検索するディレクトリのリストを含む配列です
以下は、ロードパスをコマンドラインから調べる方法です。
$ ruby -e 'puts $:'
実行してみると、このようにパスが表示されます。
$ ruby -e 'puts $:' /usr/local/lib/site_ruby/1.8 /usr/local/lib/site_ruby/1.8/i686-linux /usr/local/lib/site_ruby/1.8/i486-linux /usr/local/lib/site_ruby /usr/lib/ruby/vendor_ruby/1.8 /usr/lib/ruby/vendor_ruby/1.8/i686-linux /usr/lib/ruby/vendor_ruby /usr/lib/ruby/1.8 /usr/lib/ruby/1.8/i686-linux /usr/lib/ruby/1.8/i486-linux .
Kernel.#require でロードされたファイル名を含む配列です。
Kernel.#require で同じファイルを 複数回ロードしないようにするためのロックとして使われます。
実行してみます。
(Test2.rb)
どうにも調べ方がわからないので、tremaのディレクトリ内を検索して見つけたのが「./ruby/trema/mac.rb」でした。Kernel.#require で同じファイルを 複数回ロードしないようにするためのロックとして使われます。
実行してみます。
(Test2.rb)
puts $LOAD_PATH puts "--------------------" puts $LOADED_FEATURES
$ ruby Test2.rb /usr/local/lib/site_ruby/1.8 /usr/local/lib/site_ruby/1.8/i686-linux /usr/local/lib/site_ruby/1.8/i486-linux /usr/local/lib/site_ruby /usr/lib/ruby/vendor_ruby/1.8 /usr/lib/ruby/vendor_ruby/1.8/i686-linux /usr/lib/ruby/vendor_ruby /usr/lib/ruby/1.8 /usr/lib/ruby/1.8/i686-linux /usr/lib/ruby/1.8/i486-linux . -------------------- enumerator.so
これですかね?
tremaがこのファイルを読み込んでいるのか確認してみます。
(Test3.rb)
class Test < Controller def start puts $LOAD_PATH puts "--------------------" puts $LOADED_FEATURES end end
$LOADED_FEATURESの結果が長いので、一部省略します。
$ trema run Test3.rb /var/lib/gems/1.8/gems/trema-0.3.20/vendor/ruby-ifconfig-1.2/lib /var/lib/gems/1.8/gems/trema-0.3.20/ruby /var/lib/gems/1.8/gems/bundler-1.3.5/lib /var/lib/gems/1.8/gems/gli-2.6.2/lib /usr/local/lib/site_ruby/1.8 /usr/local/lib/site_ruby/1.8/i686-linux /usr/local/lib/site_ruby/1.8/i486-linux /usr/local/lib/site_ruby /usr/lib/ruby/vendor_ruby/1.8 /usr/lib/ruby/vendor_ruby/1.8/i686-linux /usr/lib/ruby/vendor_ruby /usr/lib/ruby/1.8 /usr/lib/ruby/1.8/i686-linux /usr/lib/ruby/1.8/i486-linux . . -------------------- enumerator.so rubygems/defaults.rb rbconfig.rb rubygems/deprecate.rb rubygems/exceptions.rb <略> trema/monkey-patch/integer.rb trema/enqueue.rb trema/send-out-port.rb forwardable.rb trema/mac.rb trema/set-eth-addr.rb trema/set-eth-dst-addr.rb trema/set-eth-src-addr.rb trema/set-ip-addr.rb <略>
trema/mac.rbというのを読み込んでいるようです。
あくまで、参考まで。
0 件のコメント:
コメントを投稿