Ruby:类接受一个 block ?

标签 ruby

我注意到 Ruby 中的 CSV 类有一些快捷接口(interface)(参见 http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html ):

CSV             { |csv_out| csv_out << %w{my data here} }  # to $stdout
CSV(csv = "")   { |csv_str| csv_str << %w{my data here} }  # to a String
CSV($stderr)    { |csv_err| csv_err << %w{my data here} }  # to $stderr
CSV($stdin)     { |csv_in|  csv_in.each { |row| p row } }  # from $stdin

有没有办法为我自己的类(class)做到这一点?我正在实现 DSL,这将使代码更加简洁。

最佳答案

这不是一个类。它是定义在 Object 上的一个方法(虽然也有一个同名的类 CSV)。您链接的文档具有误导性。 This解释得更好。

你不能像使用模块那样做,但你可以定义一个接受 block 的方法。

关于Ruby:类接受一个 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209343/

相关文章:

ruby-on-rails - Rails 如何创建数据模式种子数据

ruby - 如何在 Ruby 中同时翻译多个单词?

mysql - Table.column_names 在迁移中返回旧值

mysql - Ruby Mysql 无法连接到本地主机 (10061)

ruby-on-rails - 是否可以再次保存所有文档?

ruby-on-rails - 为什么 Assets 不使用 RAILS_ENV 集进行预编译?

ruby-on-rails - 在 state_machine gem 上持久化之前的验证

ruby - 用于乘客生产的 Rbenv

ruby-on-rails - Ruby 中的 ->() { } 是什么?

ruby - 获取通过 `attr_accessor` 定义的所有变量而不覆盖 `attr_accessor`