在Eloquent Ruby中有一個我不明白的代碼示例。Eloquent Ruby - 保存代碼塊以便稍後執行
class Document
attr_accessor :save_listener
# most of the class omitted...
def on_save(&block)
@save_listener = block
end
def save(path)
File.open(path, 'w') { |f| f.print(@contents) }
@save_listener.call(self, path) if @save_listener
end
end
# usage
my_doc = Document.new('block based example', 'russ', '')
my_doc.on_save do |doc|
puts "Hey, I've been saved!"
end
爲什麼@save_listener.call(self, path)
需要兩個參數?保存的塊看起來像只有一個參數|doc|
。這是書中的一個錯字,還是我缺少的東西?
我甚至嘗試在這個代碼中輸入並執行它,我發現我可以添加儘可能多的參數,因爲我想和不會有任何錯誤。但是我仍然不明白爲什麼在這個例子中有兩個參數。