初学Ruby问题.更改此代码的最简单方法是什么,但是将块完全保留,可以消除副作用?
$ irb
irb(main):001:0> x = lambda {|v| x=2
irb(main):002:1> v}
=> #<Proc:0x8f586f8@(irb):1>
irb(main):003:0> x.call(3)
=> 3
irb(main):004:0> x
=> 2
Run Code Online (Sandbox Code Playgroud)
这是我可以设法说明我的问题的最简单的例子,所以"删除赋值"或"不指定Proc to x"不是我正在寻找的.
我想在Proc(或lambda)中设置可以分配的局部变量,而不会影响原始的封闭范围.我可以动态创建一个类或模块来包装块,但这对于这样一个基本的东西来说似乎有些过分.
我正在尝试做的等价Python:
def x(v):
x = 2 # this is a local variable, what a concept
return v
Run Code Online (Sandbox Code Playgroud) ruby ×1