gpt4 book ai didi

ruby:instance_eval 一个文件,同时在堆栈跟踪中维护文件:行?

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:11 24 4
gpt4 key购买 nike

如果我这样做

def eval_file(file)
instance_eval read(file)
end

然后,一旦文件内的方法/ block 之一发生某些事情,我所看到的就是“eval_file”中的 (eval):20。当我对许多文件使用 eval_file 时,很难判断异常来自哪个文件(异常发生在 eval 之后,使用方法时)



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






最佳答案





the documentation可以看出, BasicObject#instance_eval(实际上还有所有其他 *_eval)将简单地报告您告诉它的任何文件名和行号:



Method: BasicObject#instance_eval



  • (Object) instance_eval(string[, filename [, lineno]])


Evaluates a string containing Ruby source code, or the given block, within the context of the receiver (obj). In order to set the context, the variable self is set to obj while the code is executing, giving the code access to obj’s instance variables. In the version of instance_eval that takes a String, the optional second and third parameters supply a filename and starting line number that are used when reporting compilation errors.


[…]


Overloads:



  • (Object) instance_eval(string[, filename [, lineno]])



[强调我的。]


一般来说,如果您使用 *_eval 方法的 String 重载,您应该确保获得 sensible location information by passing file name and line number [ alternative link ].


在您的特定情况下,您将省略行号,因为您希望 Ruby 仅使用文件的行号,但您需要传递文件名:


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

关于ruby:instance_eval 一个文件,同时在堆栈跟踪中维护文件:行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4667158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com