貧弱な言葉の質問のタイトルの謝罪 - それをより良いものにする方法はありません!次のコードでインクルードファイルから、インクルードするファイルのファイル名を取得するにはどうすればよいですか?
、私はruby bar.rb
を実行すると、どのように私はむしろfoo.rb
よりも、bar.rb
それを出力することができますか?
foo.rb
において:
module Foo
def filename
__FILE__
end
end
bar.rb
において:
require_relative 'foo'
include Foo
puts filename # outputs 'foo.rb'
これはそのコードの(とGitのREF)いくつかのコードが実行されるたびに、位置を記録し、ライブラリ関数のためのものです。
これはまったくハックですが、['caller'](http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-caller)メソッドは、途中で。 'def filename;ファイル=呼び出し元[0] .split( ':');ファイル[0];終わり。 – Telemachus
hah :)それが唯一の解決策だったら私は驚かないでしょう。 – seb
かもしれませんが、まだ*地獄のようなハッキーを感じています。そのように出力を解析することはちょうどファウルです。 'caller'は文字列の配列を返し、各文字列の最初の部分はあなたが望むものです。あなたが何をしているかによって、スタック内のどこを見たいかを検討する必要があります。つまり、配列内の最初のエントリが常に必要なわけではありません。 – Telemachus