Project1

标题: ruby的@@变量怎么用。。 [打印本页]

作者: yangff    时间: 2012-1-13 18:12
标题: ruby的@@变量怎么用。。
本帖最后由 yangff 于 2012-1-13 18:28 编辑
class A
  def self.yui_set(a)
    @@a=a
  end
end
class B<A
yui_set :hi
  def get
    return @@a
  end
end
class C <A
  yui_set :yoo
  def get
    return @@a
  end
end
b=B.new
c=C.new
c.get #=>:yoo
b.get #=>:yoo

期望
c.get #=>:yoo
b.get #=>:hi
怎么实现?
作者: 忧雪の伤    时间: 2012-1-13 18:22
本帖最后由 忧雪の伤 于 2012-1-13 18:23 编辑
b.get #=>:yoo

确定这段不会报 NoMethodError
类变量当然会被继承。
作者: yangff    时间: 2012-1-13 18:29
忧雪の伤 发表于 2012-1-13 18:22
确定这段不会报 NoMethodError ?
类变量当然会被继承。

但是我要让他们不同啊。这个变量起到了构造函数的作用怎么能相同呢……
作者: 逸豫    时间: 2012-1-14 08:11
本帖最后由 逸豫 于 2012-1-14 13:50 编辑

去掉一个@
或者类变量是个哈希表
以类名或其他做键,变量内容做值
  1. class A
  2.   @@a = {}
  3.    def self.yui_set(a)
  4.      @@a[self]=a
  5.    end
  6. end
  7. class B<A
  8. yui_set :hi
  9.    def get
  10.      return @@a[self.class]
  11.    end
  12. end
  13. class C <A
  14.    yui_set :yoo
  15.    def get
  16.      return @@a[self.class]
  17.    end
  18. end
  19. b=B.new
  20. c=C.new
  21. print c.get #=>:yoo
  22. print b.get #=>:hi
复制代码
@yangff
表问我为啥这样做




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1