从字符串创建ruby进程

从字符串创建ruby进程,ruby,lambda,Ruby,Lambda,我想将块定义为字符串,然后创建lambda。 下面的示例不起作用。 这样的事情可能吗 code_string = "|x|x*2" l = lambda {eval(code_string)} l.call(3) => 6 这很有效 eval "lambda { " + code_string + " }" 我只是不知道为什么这一个有,另一个没有。eval“lambda{{code{u string}}在eval参数上调用lambda会导致一个Proc对象,其eval调用在Pro

我想将块定义为字符串,然后创建lambda。 下面的示例不起作用。 这样的事情可能吗

code_string = "|x|x*2"

l = lambda {eval(code_string)}

l.call(3) => 6
这很有效

eval  "lambda { " + code_string + " }"

我只是不知道为什么这一个有,另一个没有。

eval“lambda{{code{u string}}

在eval参数上调用lambda会导致一个Proc对象,其eval调用在Proc对象的“内部”。结果Proc对象不带参数,因为表达式
eval(code\u string)
不带参数。当您调用Proc对象时,它会计算代码字符串!字符串“lambda{”+code_string+“}”的eval给出了一个需要参数的Proc对象,并返回2*参数。此外,使用字符串插值更为惯用(引导效率也更高),因此:
eval“lambda{code_string}”
。在Ruby中,用
+
连接多个字符串是很少见的。我并不想听起来粗鲁,但你到底为什么要这样做
eval
几乎从来都不是做某事的最佳方式,如果不考虑其他因素的话,那就是为了提高效率。这显然是非常有技巧的。有时,您需要“动态”生成代码,通常来自非Ruby代码的源代码。我使用这种技术来实现一个transpiler。