Ruby 什么';评估和课堂评估的区别是什么?
我理解Ruby 什么';评估和课堂评估的区别是什么?,ruby,Ruby,我理解class\u eval和instance\u eval之间的区别。我假设eval和class_eval之间的区别在于它们的评估环境,但在实践中这意味着什么?在eval中,您无法选择在何处运行代码,它总是在您当前的环境中。而且,它只接受一个代码字符串。因此,如果将方法定义作为字符串,则只能通过evaling类主体中的字符串来使用它 在module_eval/class_eval和instance_eval中,代码可以是字符串或块,您可以显式选择接收者(分别是作为某个继承链一部分的模块或实例
class\u eval
和instance\u eval
之间的区别。我假设eval
和class_eval
之间的区别在于它们的评估环境,但在实践中这意味着什么?在eval
中,您无法选择在何处运行代码,它总是在您当前的环境中。而且,它只接受一个代码字符串。因此,如果将方法定义作为字符串,则只能通过eval
ing类主体中的字符串来使用它
在module_eval/class_eval
和instance_eval
中,代码可以是字符串或块,您可以显式选择接收者(分别是作为某个继承链一部分的模块或实例本身)
请注意,
someobj.instance\u eval(&blk)
本质上与someobj.singleton\u class.class\u eval(&blk)
class\u eval
在类定义之外或重新打开(通过class Foo
)是有用的。