に渡された line_number が見つかりましたがclass_eval
、エラーによって報告された行番号と一致module_eval
しinstance_eval
ません。この動作は、次のように言うruby-docでは説明されていません : (instance_eval
例として使用)
オプションの 2 番目と 3 番目のパラメーターは、コンパイル エラーを報告するときに使用されるファイル名と開始行番号を指定します。
これら 3 つのメソッドclass_eval
はすべて、ファイル名を指定する 2 つの追加のパラメーターmodule_eval
をinstance_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
.
このパラメーターの正確な動作について疑問に思っていますか?