在 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|
。这是书中的错字还是我在这里遗漏了什么?
我什至尝试输入这段代码并执行它,我发现我可以添加任意数量的参数并且不会出现任何错误。但是我仍然不明白为什么这个例子中有两个参数。