我不确定这在 Ruby 中是否可行,但万一有人知道一个好的解决方案。
我想更改 block 的结构,用其他代码结构替换其中的特定节点。很像宏。
例如,假设我有一个未计算的代码块
some_method do
foo
bar
end
然后我像这样定义一些方法
def some_method(&block)
...
end
在 some_method 中,我真的很想用其他东西替换 block 中的“bar”,例如与巴兹。
我想在不评估 block 的情况下进行替换,因为最终我会将 block 传递到其他地方。
可行吗?还是没有?
我能想到相当复杂的答案:例如我可以使用定义 bar 替换的附加闭包传递 block ,并在计算 bar 时使用 method_missing 和 continuation 将 bar 替换为 baz。但是有没有更简单的方法呢?
谢谢。
最佳答案
Ruby 没有动态作用域,也没有宏,所以除非你将 block 包装在一个以 bar
作为参数的函数中,然后传递该函数,否则我不认为你可以这样替换代码。你当然可以使用eval
,但我不推荐它=)
关于ruby - 更改 Ruby proc/block 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9807308/