Ruby块作用域-如何调用实例方法
我在Ruby中遇到了一点问题。我创建了一个类,它使用fssm gem监视目录。当发生变化时,我想通知观察者。我用的是可观测模块 代码: 任何想要创建FSSM_Spike实例的观察者都必须将其自身传递给new。然后将它们添加到观察者列表中。但是,当发生FSSM回调时,方法Notify_Observators是未知的,因为该上下文中的self是FSSM::Path 我尝试向FSSM_Spike添加另一个方法,看看是否可以调用它,但结果相同Ruby块作用域-如何调用实例方法,ruby,scope,block,fssm,Ruby,Scope,Block,Fssm,我在Ruby中遇到了一点问题。我创建了一个类,它使用fssm gem监视目录。当发生变化时,我想通知观察者。我用的是可观测模块 代码: 任何想要创建FSSM_Spike实例的观察者都必须将其自身传递给new。然后将它们添加到观察者列表中。但是,当发生FSSM回调时,方法Notify_Observators是未知的,因为该上下文中的self是FSSM::Path 我尝试向FSSM_Spike添加另一个方法,看看是否可以调用它,但结果相同 如何从块上下文中调用方法?您可以将self的当前值保存在变量
如何从块上下文中调用方法?您可以将
self
的当前值保存在变量中,然后将其传递给块:
require 'fssm'
require 'observer'
class FSSM_Spike
include Observable
def initialize watcher
current_object = self # save reference to the current object
add_observer watcher
FSSM.monitor('./temp/', '**/*', :directories => true) do
update do |base, relative|
puts 'update'
current_object.notify_observers(current_object, 'update')
end
delete do |base, relative|
puts 'delete'
current_object.notify_observers(current_object, 'delete')
end
create do |base, relative|
puts 'create'
current_object.notify_observers(current_object, 'create')
end
end
end
end
如果我正确理解了你想要实现什么,我应该做这个把戏。哪里定义了
notify\u observators
方法?它是可观察模块的一部分,它就在那里:这个\u observator.changed这个\u observator.notify\u observators(…)
调用changed
是通知继续进行所必需的
require 'fssm'
require 'observer'
class FSSM_Spike
include Observable
def initialize watcher
current_object = self # save reference to the current object
add_observer watcher
FSSM.monitor('./temp/', '**/*', :directories => true) do
update do |base, relative|
puts 'update'
current_object.notify_observers(current_object, 'update')
end
delete do |base, relative|
puts 'delete'
current_object.notify_observers(current_object, 'delete')
end
create do |base, relative|
puts 'create'
current_object.notify_observers(current_object, 'create')
end
end
end
end
def initialize watcher
# ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
this_observer = self
…
create do |base, relative|
puts 'create' # ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
notify_observers(this_observer, 'create')
end
end