secondsen 发表于 2009-7-25 10:59:34

RUBY 类的实例变量 我想知道他是哪一句让他改变的怎么弄啊

就是类的实例变量。。总是莫名其妙的就变了,我也不知道是哪一句让他变的。。。怎么能让这个变量一改变就能 让我知道啊。。比如print "XXx"之类的

rednaxela 发表于 2009-7-25 20:50:36

不要直接对变量赋值呗,像这样:
class Foo
attr_reader :val
def val=(v)
    puts "#@val => #{v}"
    @val = v
end
end

f = Foo.new
f.val = 2
f.val = 3
puts f.val

rednaxela 发表于 2009-7-26 13:07:31

要是你要显示具体的调用栈信息的话,还可以用Kernel#caller方法:
class Foo
attr_reader :val
def val=(v)
    puts "@val: #@val => #{v}"
    puts caller
    @val = v
end
end

class Bar
def initialize
    @foo = Foo.new
end

def test1
    @foo.val = 1
end

def test2
    @foo.val = 2
end
end

b = Bar.new
b.test1
b.test2

secondsen 发表于 2009-7-26 21:04:33

十分感谢

我怎么就想不到。。。

rednaxela 发表于 2009-7-26 23:10:45

呵呵,这个用多了就自然会知道的了 =v=

lw 发表于 2009-8-19 08:52:55

= =+ 水水只知道C++下面得用 SetVal和GetVal

好像C#这类语言可以直接对成员变量上赋予更细致的权限吧?

tamashii 发表于 2011-5-19 08:37:23

回 5楼(lw) 的帖子

C#中变量分为成员(member)和属性(property)。
一般来说在C#中成员都是私有(private)的(struct除外),而属性是公有(public)的。
属性不能单独的存在,必须有和属性相对应的成员去存储属性的值。除此之外,属性还可以设置读(get)写(reader)权限。这有点像是ruby中的Symbol
@test

def test
return @test
end

def test=(value)
@test = value
end

这就是ruby中的“属性”。
页: [1]
查看完整版本: RUBY 类的实例变量 我想知道他是哪一句让他改变的怎么弄啊