我已经看过一个将块传递给方法的示例。调用此方法时,作为变量传递到块中的是self
。让我用一个例子解释一下:
module Subject
def initialize
@observers=[]
end
def add_observer(&observer)
@observers << observer
end
def delete_observer(observer)
@observers.delete(observer)
end
def notify_observers
@observers.each do |observer|
observer.call(self)
end
end
end
我们将使用add_observer
,如下所示:
fred = Employee.new('Fred', 'Crane Operator', 30000)
fred.add_observer do |changed_employee|
puts("Cut a new check for #{changed_employee.name}!")
puts("His salary is now #{changed_employee.salary}!")
end
这是规则吗?当您将块作为实例方法的参数传递时,传递给块的变量是否始终为“self”?
答案 0 :(得分:0)
这是规则吗?当您将块作为实例方法的参数传递时,传递给块的变量是否始终为“self”?
没有。传递给block的参数是你作为参数传递给块的任何内容。
你曾经在Ruby中使用过数组吗?然后你会知道Array#each
肯定不将self
传递给块,而是将数组的各个元素传递给它。
这里将self
传递给块的原因是因为你传递了它:
observer.call(self)
# ^^^^