ruby - 更改 Ruby proc/block 的结构

标签 ruby macros metaprogramming

我不确定这在 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/

相关文章:

ruby - Ruby 中的多重不等式

ruby - Ruby 中是否有可变持久性?

c++ - 如何用宏替换 "template <typename ..."?

function - 定义将参数传递给函数的宏

c++ - 当提供模板参数列表时,继承模板类列表

ruby - 如何同时从 ruby​​ 运行 ruby​​ 脚本?

ruby - 如何将整数和字符串数组转换为字符串,但在字符串周围保留单引号?

c++ - 在宏中生成包含文件名

ruby-on-rails - 如何将 Ruby 类名转换为下划线分隔符号?

c++ - 没有 Boost 的 BOOST_DEDUCED_TYPENAME 的实现