3

に渡された line_number が見つかりましたがclass_eval、エラーによって報告された行番号と一致module_evalinstance_evalません。この動作は、次のように言うruby​​-docでは説明されていません : (instance_eval例として使用)

オプションの 2 番目と 3 番目のパラメーターは、コンパイル エラーを報告するときに使用されるファイル名と開始行番号を指定します。

これら 3 つのメソッドclass_evalはすべて、ファイル名を指定する 2 つの追加のパラメーターmodule_evalinstance_eval受け入れ、エラー メッセージのテキストを設定する lineno パラメーターを指定します。

この質問には、この動作の実用的なデモがあります。

ただし、行番号の計算は説明よりも複雑であることがわかりました。ここにデモがあります

class Thing
  def add_method
    a = %{
      non_exist
    }
    instance_eval(a, 'dummy', 12)
  end
end

# error will raise to 15 instead of 12 which is specified 
puts Thing.new.add_method

上記のコードは、line_no渡されたパラメータがinstance_evalエラーによって報告された行番号ではなく、line_no.

このパラメーターの正確な動作について疑問に思っていますか?

4

1 に答える 1