有谁有关于 ruby 当中 self 的好点的资料吗?在看 ruby 元编程,没怎么看明白他对 self 的解释。 比如在动态创建方法当中有这样一段:
class Computer
def initialize(computer_id, data_source)
.......
end
def self.define_component(name)
..........
end
define_component :mouse
define_component :cpu
define_component :keyboard
end
在上面的 self.define_component(name) 中,方法 define_component(name) 应该只能通过 Computer 类来调用,那么这里不用 self.define_component(name),改成 define_component(name) 应该也是可以的吧
self.define_component 和 Computer.define_component 意义一致,都是类方法 直接定义的是实例方法。
#8 楼 @zhaojiahui 看来楼主确实没有看懂,写成 blog 了 http://fsword.github.com/blog/2012/06/29/rubyzhong-de-self/
惊叹于@fsword 的效率! 入门就看这本书的确会陷入复杂的内部原理,建议看如何使用 ruby 之类的书,先发现它的乐趣,感觉有必要的时候再深入了解。
正好也在读这本书,也来尝试着回答一下。
假设这么一段
class Computer
end
a = Computer.new
按照一般的理解,这段代码就定义了定义一个类 Computer 以及 Computer 的一个实例 a。
Ruby 有意思的地方就在于,Computer 本身其实也是一个类的实例(即一个对象), 那么,Computer 这个对象所属的类又是什么呢? 通过调用
Computer.class # => Class
就可以知道,它本身是类 Class 的一个实例。
那么,让我们回到开头,
class Computer
def self.define_component(name)
# ...
这里的 self 意思就很明显了,就是 Computer 这个对象(类 Class 的一个实例)
进一步引申出来的话题还有很多,比如 Class 这个实例本身的 class 又是什么呢,Class / Module / Kernel / Object / BasicObject 的关系是什么?书中早已解答。
另,我没有太多 Ruby 实战经验,不过读这本书的前三章也不算费力,确实是讲透原理的一本好书,推荐。
类方法,你可以认为它类似C++,C#或者Java里面的类里面的静态函数,它为所有类实例可见,无需实例化类对象就可以使用了
$ cat a.rb
class A
def self.x
p self
end
end
A.x
A.new.x
$ ruby a.rb
A
a.rb:7:in `<main>': undefined method `x' for #<A:0x00000001a83f58> (NoMethodError)