新手问题 Observer notify_observers() 的 *args 参数传递给 observer 的问题

stardiviner · 2014年07月14日 · 最后由 windwiny 回复于 2014年07月15日 · 2320 次阅读

这里是代码示例:

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

class Notifier
  def update(car, miles)
    puts "The car has logged #{miles} miles, totaling #{car.mileage} miles traveled."
    puts "The car needs to be taken in for a service!" if car.service <= car.mileage
  end
end

require 'observer'

class Car
  include Observable

  attr_reader :mileage, :service

  def initialize(mileage = 0, service = 3000)
    @mileage, @service = mileage, service
    add_observer(Notifier.new)
  end

  def log(miles)
    @mileage += miles
    changed
    notify_observers(self, miles)
  end
end

car = Car.new(2800, 3000)
car.log(100)
car.log(100)

这里 notify_observers(self, miles) 会把参数 *args (也就是 self, mils) 传递给 add_observer 的 observer ( Notifier.new ), 但是我不明白: Notifier 只有 update 没有 initialize,这样别的地方传过来的参数也是直接传给 update 的吗? 还有一个不明白的地方是:这里传递的参数 self 是不变的还是变化的?如果是不变的,那么是在传递给 Notifier.new 的时候是 car 这个 instance 吗,还是其他的?

看到有 72 次阅读,但是一个人都没有回答的。这是啥情况????

没人回答?那就自己动手做实验检查吧。

在代码里加入 require 'pry' binding.pry

执行到这里的时候就打开 pry 交互模式了,可以看变量 ID,查看代码等等

还可以这样的啊?真有意思。谢了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号