找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4517|回复: 6

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

[复制链接]
发表于 2009-7-25 10:59:34 | 显示全部楼层 |阅读模式
就是类的实例变量。。总是莫名其妙的就变了,我也不知道是哪一句让他变的。。。怎么能让这个变量一改变就能 让我知道啊。。比如print "XXx"之类的
发表于 2009-7-25 20:50:36 | 显示全部楼层
不要直接对变量赋值呗,像这样:
  1. class Foo
  2.   attr_reader :val
  3.   def val=(v)
  4.     puts "#@val => #{v}"
  5.     @val = v
  6.   end
  7. end
  8. f = Foo.new
  9. f.val = 2
  10. f.val = 3
  11. puts f.val
复制代码
发表于 2009-7-26 13:07:31 | 显示全部楼层
要是你要显示具体的调用栈信息的话,还可以用Kernel#caller方法:
  1. class Foo
  2.   attr_reader :val
  3.   def val=(v)
  4.     puts "@val: #@val => #{v}"
  5.     puts caller
  6.     @val = v
  7.   end
  8. end
  9. class Bar
  10.   def initialize
  11.     @foo = Foo.new
  12.   end
  13.   
  14.   def test1
  15.     @foo.val = 1
  16.   end
  17.   
  18.   def test2
  19.     @foo.val = 2
  20.   end
  21. end
  22. b = Bar.new
  23. b.test1
  24. b.test2
复制代码
 楼主| 发表于 2009-7-26 21:04:33 | 显示全部楼层
十分感谢   

我怎么就想不到。。。
发表于 2009-7-26 23:10:45 | 显示全部楼层
呵呵,这个用多了就自然会知道的了 =v=
发表于 2009-8-19 08:52:55 | 显示全部楼层
= =+ 水水只知道C++下面得用 SetVal和GetVal

好像C#这类语言可以直接对成员变量上赋予更细致的权限吧?
发表于 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中的“属性”。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|幻想森林

GMT+8, 2026-10-30 23:33 , Processed in 0.011681 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表