相关疑难解决方法(0)

如何在ruby proc/lambda中使用真正的局部变量

初学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

10
推荐指数
2
解决办法
4532
查看次数

标签 统计

ruby ×1