`
敲代码的小北
  • 浏览: 7191 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

《Ruby元编程》读书笔记——星期一:对象模型

 
阅读更多

最近对红宝石很感兴趣。喜欢rails的简约,喜欢ruby的人性化。《Ruby元编程》它讲述了你和Bill(一个资深的Ruby程序员)在办公室一周发生的故事。读完后感觉对编程有了一个新的了解。关于“元”这个字眼。到周天再解释吧。

      话不多说,先看一段代码进入今天的主题。

 

  • 类打开技术

 

 

3.times do 
  class C
     puts "Hello"
  end

=> Hello
    Hello
    Hello

//====================
Class D
    def x; 'x' end
end

Class D
  def y; 'y' end
end

obj = D.new
obj.x =>'x'
obj.y =>'y'

 

 
我们知道在Java是一种编译后在虚拟机中运行中的静态的语言,不允许在同一个包里面有两个相同的类出现,更不允许,在类定义后,重新去定义。ruby作为一种动态类拥有以上的特别的写法。

如上 C类不是被定义了3个,而是执行了3次。

       D类第一次定义了一个x方法,返回值为'x'。第二次又定义了一个y方法,返回'y'。

我们称以上的技术叫“打开类”技术。非常的灵活。当然打开类也有不好的地方,比如类污染。

 

 

  • 类的真相
    1.一个对象的实例变量存在于对象本身,而一个对象的方法存在于对象自身的类。
String.instance_methods == "abc".methods   # true
String.methods == "abc".methods               #false
       2.类自身也是对象。
 


1."hello".class # => String
String.class # =>Class

2.  Class.instance_methods  #=> [:superclass,:allocate,:new]

3.  String.superclass  #=> Object
Object.superclass  #=>BasicObject
BasicObject.superclass  #=> nil

4.  Class.superclass  # => Module
Module.superclass #=>Object

5. class Myclass;end
obj1 = Myclass.new
obj2 = Myclass.new
 类和其他对象一样也有自己的类(如1),它的名字叫做Class。类中也有方法(如2),所有的类最终都继承与Object,Object本身又继承BasicObject,BasicObject是ruby体系的根节点。(如3).一个类只不过是一个增强的Module,增加了3个方法 new , allocate, superclass(如4).obj1和Myclass 都是一个引用,唯一的区别是obj1是一个变量,而Myclass是一个常量(任何以大写字母开头的引用)。

  • 总结
    对象无非就是一组实例变量外加一个指向其类的引用。对象的方法并不存在于对象中,而存在类中。这些方法称为类的实例方法。
   类无非就是一个对象外加一组实例方法和易对其超类的引用。Class类是Moudule类的子类。因此类也是一个模块。
跟任何其他对象一样,类有自己的方法,比如new方法。这些是Class类的实例方法。跟其他对象一样,类必须通过引用进行访问。你已经使用过常量引用过它们:这就是类的名字。

 本人为ruby新手,希望各路高手轻喷。
  

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics