Ruby 为什么';t instance_exec覆盖Proc对象中存在的局部变量';有约束力吗?

Ruby 为什么';t instance_exec覆盖Proc对象中存在的局部变量';有约束力吗?,ruby,metaprogramming,Ruby,Metaprogramming,我正在为一个项目编写一个DSL,我遇到了一个问题,当我不想让局部变量流入嵌套的进程时,它们会溢出。似乎无论我尝试什么,一旦局部变量的值被设置到proc的绑定中,我都不能用另一个作用域的值覆盖它 我正在努力工作的一个例子: 类Obj 德福 :foo 结束 结束 def run_proc(上下文和块) context.instance_exec(&block) 结束 def run_示例(上下文) #这个'foo'是最终绑定到的本地变量 #下一行的进程,我似乎无法覆盖 foo=:巴 运行程序(上下文

我正在为一个项目编写一个DSL,我遇到了一个问题,当我不想让局部变量流入嵌套的进程时,它们会溢出。似乎无论我尝试什么,一旦局部变量的值被设置到proc的绑定中,我都不能用另一个作用域的值覆盖它

我正在努力工作的一个例子:

类Obj
德福
:foo
结束
结束
def run_proc(上下文和块)
context.instance_exec(&block)
结束
def run_示例(上下文)
#这个'foo'是最终绑定到的本地变量
#下一行的进程,我似乎无法覆盖
foo=:巴
运行程序(上下文){foo}
#^我希望能够根据传递的上下文obj计算'foo'
结束
obj=obj.new
#我希望这三个调用都返回“:foo”`
obj.foo#=>:foo#按预期工作
obj.instance_exec{foo}=>:foo按预期工作
run#example(obj)#=>:bar#不起作用,因为“run#”示例`
#方法的局部'foo'变量优先
#通过传递对象的'foo'方法
我做了一些挖掘,找到了与我一直尝试的方法类似的答案:。我还研究了在proc绑定中取消定义局部变量的可能性,但这个答案声称这样做是不可能的:


所以我现在的问题是:我应该放弃尝试嵌套进程和/或找到一个没有本地变量/方法名称冲突问题的解决方法,还是真的有办法解决这个问题?

您可以明确地使用
self.foo

使用它将调用自身当前引用的对象的绑定,而不是创建proc/block时状态的关闭。

foo()
还将在局部变量定义上强制方法调用