I have found the line_number passed to class_eval
, module_eval
and instance_eval
doesn't match the line numbers reported by the error. This behaviour is not explained by the ruby-doc which says: (use instance_eval
as an example)
the optional second and third parameters supply a filename and starting line number that are used when reporting compilation errors.
All these three methods class_eval
, module_eval
and instance_eval
accepts two additional params to specify the filename and lineno parameters set the text for error messages.
this question has a practical demo for this behavior.
However, I have found the calculation of line numbers more complex than the explanation. Here is a demo
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
The code above proves that the line_no
param passed to instance_eval
is not the line numbers reported by the error but is only related to the line_no
.
I am wondering about the exact behavior of this params?