初学者 Ruby 问题。 最简单的方法是如何更改此代码,但完全保留块,消除副作用?
x = lambda { |v| x = 2 ; v}
x.call(3)
#=> 3
x
#=> 2
这是我能想到的最简单的例子,用来说明我的问题,因此“删除分配”或“不将Proc分配给x”不是我要找的。
我希望在一个Proc(或lambda)中设置本地变量,而不会影响原始封闭范围。我可以动态创建一个类或模块来包装代码块,但对于这样一个基本操作来说,那似乎有点过度了。
相当于我所尝试做的Python代码:
def x(v):
x = 2 # this is a local variable, what a concept
return v
x
就是一个闭包变量。你是否有任何条件禁止重命名其中的变量,例如_x
?否则,您将试图禁用 Ruby 语言中的基本期望。 - tadmanProc
和lambda
都不能用于进行适当的函数式编程,因此它们是廉价的。 - wberry