Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 什么';评估和课堂评估的区别是什么?_Ruby - Fatal编程技术网

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
)是有用的。