ruby:instance\u在stacktrace中维护file:line时评估文件?

ruby:instance\u在stacktrace中维护file:line时评估文件?,ruby,Ruby,如果我这样做 然后,一旦文件中的一个方法/块发生了什么事情,我所看到的就是类似于“eval_file”中的(eval):20。当我在许多文件中使用eval_文件时,很难判断异常来自哪个文件(当使用方法时,异常发生在eval之后) 有什么方法可以让我看到实际的文件和行号吗?正如您可以从中看到的,BasicObject\instance\u eval(事实上,所有其他的*\u eval都会简单地报告您告诉它的任何文件名和行号: 方法:基本对象#实例#评估 (对象)实例评估(字符串[,文件名[,行号

如果我这样做

然后,一旦文件中的一个方法/块发生了什么事情,我所看到的就是类似于“eval_file”中的
(eval):20。当我在许多文件中使用eval_文件时,很难判断异常来自哪个文件(当使用方法时,异常发生在eval之后)

有什么方法可以让我看到实际的文件和行号吗?

正如您可以从中看到的,
BasicObject\instance\u eval
(事实上,所有其他的
*\u eval
都会简单地报告您告诉它的任何文件名和行号:

方法:基本对象#实例#评估
  • 对象
    实例评估(字符串[,文件名[,行号]])
在接收方(obj)上下文中计算包含Ruby源代码或给定块的字符串。为了设置上下文,在代码执行时将变量
self
设置为obj,从而使代码能够访问obj的实例变量。在采用
字符串的
实例评估
版本中,可选的第二个和第三个参数提供报告编译错误时使用的文件名和起始行号

[……]

重载:
  • 对象
    实例评估(字符串[,文件名[,行号]])
[我的重点。]

通常,如果使用
*\u eval
方法的
字符串
重载,应确保获得[]

在您的特定情况下,您可能会忽略行号,因为您希望Ruby只使用文件的行号,但需要传递文件名:

def eval_file(file)
  instance_eval read(file)
end
def eval_file(file)
  instance_eval read(file), file
end