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^)ノ