ruby - ruby 中没有参数的 DSL block

标签 ruby block dsl

我正在用 ruby​​ 编写一个简单的 dsl。几周前,我偶然发现了一些博客文章,其中展示了如何转换代码,例如:

some_method argument do |book|
  book.some_method_on_book
  book.some_other_method_on_book :with => argument
end

更简洁的代码:

some_method argument do
   some_method_on_book
   some_other_method_on_book :with => argument
end

我不记得如何做到这一点,我也不确定缺点,但更简洁的语法很诱人。有人知道这种转变吗?

最佳答案

def some_method argument, &blk
  #...
  book.instance_eval &blk
  #...
end

更新:但是,它省略了 book 但不允许您使用参数。要透明地使用它,您必须以某种方式传输它。我建议自己在书上做:

class Book
  attr_accessor :argument
end

def some_method argument, &blk
  #...
  book.argument = argument
  book.instance_eval &blk
  #...
end

some_method 'argument' do
   some_method_on_book
   some_other_method_on_book argument
end

关于ruby - ruby 中没有参数的 DSL block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225946/

相关文章:

html - Wordpress:CSS 覆盖有序列表 block 不读取起始值

teamcity - 如何使用 TeamCity DSL versionedSettings 功能?

api - "private language WTF"与糟糕的库/API/DSL 设计有何区别?

ios - Swift DSL - 如何根据已知的常量数据创建平面字典?

ruby-on-rails - 如何在 Ruby 中用 map 重构每个函数?

java - 有没有更好的方法来切换注释代码?

mysql - Rails 安装 mysql - 安装 mysql2 : ERROR: Failed to build gem native extension 时出错

带 block 的 Ruby 方法链接 - 令人困惑的不一致语法错误

Ruby:连接和排序文件名

ruby - 通过 ruby​​ 中的值属性选择哈希值