新手问题 类别可以复写吗?

wzhang1987 · 2013年01月17日 · 最后由 5long 回复于 2013年01月18日 · 2441 次阅读

ruby 里面方法可以复写。

那么类别呢?以下一类有 3 个方法,我写到 3 个相同类里面效果是一样的吗? 如果创建了实例只要是同名类别的方法都能用吗?

1.

class Fruit
  def kind=(k)
    @kind = k
  end

  def kind
    @kind
  end

  def inspect
    "a fruit of the #{@kind} variety"
  end
end

2.

class Fruit
  def kind=(k)
    @kind = k
  end
end

class Fruit
  def kind
    @kind
  end
end

class Fruit
  def inspect
    "a fruit of the #{@kind} variety"
  end
end

试一下不就知道了

奇怪了,为什么 inspect 可以呢?

肯定可以的。。。测试错了吧

#4 楼 @zhangjinzhu 我试了下好像不是复写,而是共享,即实例会去每个同名类里面查找需要的信息

解析 class Fruit 的时候,其实都是打开 Fruit 这个域。两种写法一样。

#6 楼 @Rei 还是有稍许不一样的,不一样在于你创建对象的时机

class Fruit
  def kind=(k)
    @kind = k
  end
end

apple = Fruit.new
apple.kind = 'apple'
#p apple.kind => undefined method `kind' 
p apple.inspect

class Fruit
  def kind
    @kind
  end
end

orange = Fruit.new
orange.kind = 'orange'
p orange.kind
p orange.inspect

class Fruit
  def inspect
    "a fruit of the #{@kind} variety"
  end
end

banana = Fruit.new
banana.kind = 'banana'
p banana.kind
p banana.inspect

没有 "3 个相同类"和"同名类" 这种说法,第二种做法只是把已经存在的 Fruit 类拿出来修改。

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