ruby 语言 手记

阅读更多
Mixin 中的实例变量:
解决mixin多重继承中共享变量:

如下例,在不同的对象调用时,将可能得不到想要的结果。
module Observable
  def observers
    @observer_list ||= []
  end
 
  def add_observer(obj)
    observers << obj
  end

  def notify_observers
    observers.each {|o| o.update}
  end
end


下面的类使用Observable模块的一个类,但它自己也有一个@observer_list的实例变量。
class TelescopeScheduler
  # other classes can register to get notifications
  # when the schedule changes

  include Observable

  def initialize
    @observer_list = [] # folks with telescope time
  end

  def add_viewer(viewer)
    @observer_list << viewer
  end
end


解决上面的问题即是确保它们有一个唯一的名字。
   感觉此方法最合适: 模块可以使用模块一级的散列表,以当前对象的ID作为索引,来保存特定于实例的数据,而不必使用RUBY的实例变量。

 
module Test
  State = {}
  def state=(value)
    State[object_id] = value
  end

  def state
    State[object_id]
  end
end

class Clen
  include Test
end

你可能感兴趣的:(Ruby,Python)