ruby - 从 Ruby block 中的一系列调用返回

标签 ruby

我有一个像这样的 Ruby 代码的 DSL:

Activity.new('20-06-2012') do
  Eat.log do |l|
    l.duration = 0.30
    l.priority = 5
  end
  Work.log do |l|
    l.duration = 2
    l.priority = 3
  end
end

每次调用 log() 方法时,都会实例化一个 Log 对象(在幕后),并将 block 传递给方法( block 传递给 Log 对象的构造函数)。我的问题是,有没有办法收集 log() 方法的所有返回值?在上面的示例中,最外层 block 的返回值是对 log() 的最后一次调用。但我想将所有调用的结果放在一个数组中,而不仅仅是最后一个。

谢谢!

最佳答案

您的内部 DSL 仍然太像 Ruby,您可以将其重构为如下所示:

activity '20-06-2012' do
  log :eat do
    duration 0.30
    priority 5
  end
  log :work do
    duration 2
    priority 3
  end
end

现在捕获 instance_eval 中的调用并将值累积到内部数组中,这是通常的 DSL 内容。

关于ruby - 从 Ruby block 中的一系列调用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124491/

相关文章:

ruby - Ruby 中的多线程编程

ruby-on-rails - 是给定集合中的对象吗?

Ruby array.select 多行 block

ruby-on-rails - 在 Rails/Cloudfront/Heroku 中设置 Assets 缓存过期

javascript - 如何在 NodeJS 应用程序的服务器端评估 Ruby?

ruby - 我正在使用 Deepin linux 15.4.1。我想安装 Ruby 语言做什么,我想执行 Sass/SCSS。但现在我尝试以 root 用户 : 的身份执行此操作

ruby-on-rails - f.check_box checked => true for ruby​​ on rails

ruby-on-rails - rails 如何正确地将模型移动到命名空间

c# - Ruby 等效于 C# Linq 聚合方法

ruby-on-rails - 使用 paperclip-av-transcoder 的回形针视频附件错误