在ruby里,每一个类都有一个Metaclass。除了Metaclass之外,所有的Object都是instance object.
换言之,在ruby里,
你所有能看见的object都是实例。
首先,在ruby中,如何知道一个object是一个类还是这个类的实例呢?很简单,如果有object的klass指向它,那么他就是我们传统所说的'类', 而如果一个object的klass指向别人那么就是传统所说的'实例'. 为什么要加传统呢?因为在ruby里,一个object即可以是'类',也可以是'实例'。也就是说既有一个object的klass指向它,而它的klass又指向别人。所以即使是传统意义的'类',也是metaclass的实例。而metaclass是不可见的,所以在ruby里所有的object都是一个'实例', 只有metaclass才是真正的纯'类'。这不禁让我觉得以往面向对象里所定义的'类','实例'在ruby面前被扭曲了,甚至觉得词汇定义的贫乏。
具体的关系可以看下图:
知道了这个,那么就很好理解
class T1
@v1 = 'abc'
def get_v1
return @v1
end
def self.get_v1
return @v1
end
end
i1 = T1.new
puts i1.get_v1 #返回空,而不是'abc'
puts T1.get_v1 #这个才是返回'abc'
因为这里@v1是T1这个实例的变量,而不是ins1这个实例的变量,这是两个完全不相干的实例,如果我不追加定义self.get_v1的话T1里根本就没有get_v1这个方法,所以你调用T1.get_v1是错误的。
- 大小: 50.9 KB
分享到:
相关推荐
它具有类和对象的概念,所有的东西都是对象,包括基本的数据类型。类定义了对象的属性和行为,而对象则是类的实例。Ruby还支持继承、多态和模块,使得代码可以高度模块化和可复用。 在函数和方法方面,Ruby允许...
- **一切皆对象**:在Ruby中,从基本数据类型到布尔值,乃至`nil`,所有东西都被视为对象。方法调用参数也是可选的,这体现了Ruby的灵活性和面向对象的哲学。 - **语句块与迭代器**:Ruby支持简洁的循环语法,如`...
- 类与对象:Ruby是一门纯面向对象的语言,所有的东西都是对象,类是用来创建对象的模板。 - 继承:Ruby支持单继承,但通过模块可以实现多重继承的效果。 - 属性与方法:通过attr_accessor、attr_reader和attr_...
在Ruby中,由于所有东西都是对象,因此可以通过方法调用来实现多态。例如,`+`操作符可以用于整数相加,也可以用于字符串拼接。 #### 二、类的定义 在Ruby中,类是用来定义具有相同属性和行为的对象的模板。类的...
Ruby是一种纯面向对象的语言,意味着所有的东西都是对象,包括基本数据类型。每种对象都有自己的类,如整数属于Integer类,字符串属于String类。对象可以有方法,通过`.`操作符调用。Ruby中的类还可以继承,通过`...
元类是定义类本身的类,在Ruby中,每个类都有一个元类,通过元类可以修改类的行为。 **3.7 Ruby的动态性** Ruby支持动态方法定义、方法重写等特性,使得程序能够在运行时动态地改变其行为。 **3.8 变量** - **...
Ruby是一种完全的面向对象语言,这意味着所有的东西都是对象,包括基本的数据类型如数字、字符串和布尔值。它支持类、继承、模块、多重继承等面向对象特性,同时引入了块、闭包和 Proc 对象,使得函数式编程风格也能...
1. **面向对象**: Ruby是一种纯粹的面向对象语言,几乎所有的东西都被视为对象,包括基本数据类型如整数和字符串。 2. **动态性**: Ruby是一种动态类型语言,这意味着变量不需要预先声明类型,且类型检查是在运行时...
- 在Ruby中,每个类都有一个隐式的元类。 **3.8 变量** - **局部变量:** 在方法或代码块中定义,作用域仅限于定义它的代码块或方法。 - **实例变量:** 以`@`开头,作用于类的每个实例。 - **类变量:** 以`@@`...
所有的东西都是对象,包括基本类型如数字、字符串和布尔值。类定义了对象的结构和行为,而对象则是类的实例。Ruby的面向对象特性使得代码易于理解且可复用性强。另外,Ruby的模块(Module)提供了命名空间管理和混合...
- **实例变量与类变量**:实例变量在每个对象实例中都有独立的副本,而类变量在所有实例间共享。 - **单例方法**:单例方法是为特定对象定义的方法,只能被该对象调用。 - **访问控制**:Ruby提供了访问控制机制,...
在Ruby中,一切都是对象,包括基本的数据类型如数字、字符串和布尔值。理解这一点至关重要,因为这意味着你可以对任何东西调用方法,这极大地增强了代码的灵活性和可扩展性。 Ruby的语法简洁明了,它采用了自解释的...
- **面向对象特性**: Ruby是一门纯面向对象的语言,所有东西都是对象,包括数字和字符串。 - **数组和哈希**: 数组用于存储一系列有序的数据,而哈希则通过键值对的方式存储数据。 - **符号**: 符号是不可变的字符串...
- **类与对象**:Ruby是一种完全面向对象的语言,所有东西都是对象,包括数字和字符串等基本数据类型。类是创建对象的模板。 - **继承与多态**:子类可以继承父类的属性和方法,并且可以覆盖或扩展它们的功能。多态...