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

stardiviner · July 14, 2014 · Last by windwiny replied at July 15, 2014 · 2314 hits

这里是代码示例:

#!/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,查看代码等等

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

You need to Sign in before reply, if you don't have an account, please Sign up first.