![]() |
1
3
你不能这么做。你看到的原因是这里有两种不同的背景。一个是块的上下文,它 closes over 定义它的上下文。另一个是proc对象包装器的上下文,它与任何其他对象上下文相同,并且与块本身的上下文完全无关。
我想你最接近的是
另一种选择是向块传递
|
![]() |
2
3
你可以用
但是,除非使用mixin/mixout框架(如mixico或mixology),否则将把包含模块中的方法放入词法作用域中,这样在块返回后它们仍然可以访问。
Here 这是一篇关于从块中使用DSL的不同方法的好文章。 |
![]() |
3
2
另一种选择是,从rampion开始,在混合到块之前复制块的上下文,这样你就不会在完成后弄乱上下文。
注意,只有在块中没有运行任何mutator方法时,这才对您有用 |