锁定老帖子 主题:玩转Ruby系列:玩转ruby中的变量
精华帖 (0) :: 良好帖 (10) :: 新手帖 (10) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-09
最后修改:2009-07-08
在学校的时候就听说动态语言,python啦,ruby,lua啦都是。只是了解对象运行时可以改变状态,比如添加属性,增加方法啦。但是一直不知道动态语言到底怎么动来着,还能比动感超人更厉害,很好奇,但一直没去学习一门动态语言。现在开始学习Ruby,慢慢的就开始了解什么是动态语言了。
说Ruby是完全面向对象的语言,我还不能判断它是不是完全,人们这样说我就先这样听吧。面向对象的话就要研究类的实现,下面谈谈Ruby中的类有什么不正常的,和老大Java比较比较。
下面一个一个说说这四种变量:
class Test def instance @instance end def instance=(param) @instance = param end end test = Test.new test.instance="samsam is cool" puts test.instance 这样看起来还以为是直接访问实例变量呢(这是不可能的,因为...呵呵...ruby中的实例变量只可能是私有的)。这样其实和Java的setter和getter一样,就方法名更好看。别急,Ruby会让你兴奋的,Ruby里有现成的访问器attr_accessor,是用symbol定义的实例变量,不用写读写方法了(听说Java7也要加入这一特性哦)。 class Test attr_accessor :instance end test = Test.new test.instance="samsam is cool" puts test.instance 还有只针对读和写的访问器,attr_reader和attr_writer,用来只读和只写。
class Test @@class = "Ruby is cool" def self.get_class @@class end end puts Test.get_class
但是,经过我的实验,还是有很不一样的地方。 Java中的静态变量只能由静态方法来访问,但Ruby中的类变量可以由普通方法访问。 class Test @@class = "Ruby is cool" def get_class @@class end def instance @instance end def instance=(param) @instance=param end end a = Test.new a.instance="samsam is cool" puts a.get_class 更甚的是,在静态方法中都能访问实例变量。 class Test @@class = "Ruby is cool" def self.get_class puts @instance @@class end def instance @instance end def instance=(param) @instance=param end end puts Test.get_class @instance是nil,因为get_class时是通过Test.get_class调用的,没有对象,也就没有对@instance赋值,所以等于nil。虽然这样没有意义,但好像没有错啊。Ruby很灵活,呵呵!:)
class Test def method local=1 end end test = Test.new puts test.method =>hello.rb:3:in `method': undefined local variable or method `local' for #<Test:0x284 0718> (NameError) from hello.rb:8
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-09
ruby 中不存在静态方法与类方法
所有的方法都是对象方法,方法都是message,调用都是send |
|
返回顶楼 | |
发表时间:2009-01-10
很久前看过一帖子,
建议是:不要使用类变量,应该用类的实例变量 |
|
返回顶楼 | |
发表时间:2009-01-10
sina2009 写道 ruby 中不存在静态方法与类方法
所有的方法都是对象方法,方法都是message,调用都是send 这些我还没有研究过,只是先这样理解吧 |
|
返回顶楼 | |
发表时间:2009-01-11
学习了,希望能得到帮助.谢谢.
|
|
返回顶楼 | |
发表时间:2009-01-11
night stalker 写道 很久前看过一帖子,
建议是:不要使用类变量,应该用类的实例变量 不用那麼死板。每種工具都有其用處,看人想象而已。 |
|
返回顶楼 | |
发表时间:2009-01-11
Omnibus 写道 night stalker 写道 很久前看过一帖子,
建议是:不要使用类变量,应该用类的实例变量 不用那麼死板。每種工具都有其用處,看人想象而已。 不是死板,是类变量有bug... |
|
返回顶楼 | |
发表时间:2009-01-12
night stalker 写道 Omnibus 写道 night stalker 写道 很久前看过一帖子,
建议是:不要使用类变量,应该用类的实例变量 不用那麼死板。每種工具都有其用處,看人想象而已。 不是死板,是类变量有bug... 可以说说具体是什么吗?或者给个发现Bug的思路也好。 |
|
返回顶楼 | |
发表时间:2009-01-12
night stalker 写道 Omnibus 写道 night stalker 写道 很久前看过一帖子,
建议是:不要使用类变量,应该用类的实例变量 不用那麼死板。每種工具都有其用處,看人想象而已。 不是死板,是类变量有bug... 你說namescope的問題嗎?實際影響不大。 而且,1.9就修正過來吧。 |
|
返回顶楼 | |
浏览 5139 次