Rubyで実行ファイルのパスを取得するヘ(^o^)ノ
__FILE__
は実行ファイルのパス、カレントパスを取得できます。
__FILE__
は実行ファイルのファイルパスを取得できます。
Railsではevalを多様しています。
コードを読んでるとこんなのをよく目にします。
class_eval <<-RUBY, __FILE__, __LINE__ ... end
なんでだろう、ってことで調べてみました。
サンプルコード
class Hello [:hello, :goodbye].each do |val| class_eval <<-RUBY def say_#{val} #{val} end RUBY end end
上のコードはNoMethodErrorエラーが発生します。
エラー内容はこんな感じ
(eval):2:in `say_hello': undefined local variable or method `hello' for #<Hello:0x007fea0a8831b8> (NameError) from hello.rb:11:in `<main>'
注目は(eval):2
これではエラー箇所が特定しにくいのです。
__FILE __, __LINE__
を付けてみましょうヘ(^o^)ノ
hello.rb:4:in `say_hello': undefined local variable or method `hello' for #<Hello:0x007fbf5aa17130> (NameError) from hello.rb:11:in `<main>'
どうでしょうか?
ファイル名と定義されているメソッドの行番号が表示されています。
これならエラー箇所が特定しやすいですよね?
Happy Hacking٩( ‘ω’ )و
追記
$0
と__FILE__
の違いを試してみましたー
Thanksヘ(^o^)ノ
@murajun1978 (文字数足りず。。)
ちなみにカレントパス(カレントディレクトリ)は、Dir.pwdです。
(cwdじゃないのが不思議)
— ice (@meltedice) 2014, 10月 10