好的,所以我已经构建了一个 DSL,其中一部分需要 DSL 的用户定义我所说的“编写器块”
writer do |data_block|
CSV.open("data.csv", "wb") do |csv|
headers_written = false
data_block do |hash|
(csv << headers_written && headers_written = true) unless headers_written
csv << hash.values
end
end
end
writer 块的调用方式如下:
def pull_and_store
raise "No writer detected" unless @writer
@writer.call( -> (&block) {
pull(pull_initial,&block)
})
end
问题是双重的,首先,这是处理这种事情的最佳方法,其次我遇到了一个奇怪的错误:
undefined method data_block' for Servo_City:Class (NoMethodError)
这很奇怪,因为我可以data_block
在那里看到,或者至少它至少存在于CSV
街区之前。
我正在尝试创建的是一种让用户编写包装块的方法,该包装块既环绕一个块,又为被包装的块产生一个块,哇,这真是一口。