ruby_类的实例变量和对象的实例变量
Ruby中,类除了类变量@@x、实例变量@x,还有一个类的实例变量@x的概念,而且类的实例变量和对象的实例变量可以重名。
类变量@@x
实例变量@x,供给对象使用
类的实例变量@x,供给类使用
怎么理解呢?
要理解Ruby的核心之一:类本身也是一个实例,比如下面例子的Test类,Test本身是Class类的一个对象。
这样也就可以理解,类这个实例也可以有方法,这与对象的实例方法是不同的。
看例子:
#NOTICE: 可以重名
class Test
@@y = 100
def getY
@@y
end
def setY(y)
@@y = y
end
def self.getY
@@y
end
def self.setY(y)
@@y = y
end
#object的实例变量
attr_accessor :cls_var #NOTICE: 可以重名
def initialize
@cls_var = 0
end
def increate
@cls_var += 1
end
#class的实例变量
class<<self
attr_accessor :cls_var #NOTICE: 可以重名
end
def self.increate
@cls_var ||= 0
@cls_var += 1
end
end
puts Test.cls_var
Test.increate
puts Test.cls_var
Test.increate
puts Test.cls_var
puts "----------------------------"
t1 = Test.new
puts t1.cls_var
t1.increate
puts t1.cls_var
puts "----------------------------"
puts t1.getY
t1.setY(200)
puts t1.getY
puts "----------------------------"
puts Test.getY
Test.setY(300)
puts Test.getY
puts t1.getY
输出:
nil
1
2
----------------------------
0
1
----------------------------
100
200
----------------------------
200
300
300
PP
PP
PP
--
PP
PP
PP
分享到:
相关推荐
本文将深入探讨Ruby语言中的类变量、全局变量、实例变量,以及多态的概念,并结合Ruby编码规范来阐述如何有效地编写代码。 一、类变量 类变量在Ruby中以`@@`前缀表示,它们是属于类或模块的共享变量,不会被类的...
书中的章节会逐步引导你了解如何声明变量、数据类型(包括字符串、数字、数组和哈希)、控制流(如条件语句和循环)、函数定义以及类和对象的概念。此外,你还会学习到Ruby的模块系统,它是组织代码和实现命名空间的...
在Ruby语言中,类实例变量、类实例方法与类变量和类方法是构成面向对象编程模型的重要组成部分。它们各自有不同的用途和行为特性,下面详细介绍这些概念的区别以及它们的使用场景。 首先,类实例变量和类实例方法都...
5. **变量与常量**:Ruby 有局部变量、实例变量、类变量和全局变量。它们分别以 `@`、`@@`、`$` 开头。常量以大写字母开头,但 Ruby 不强制执行常量的不变性。 6. **控制流**:包括条件语句(`if`、`unless`、`case...
变量在Ruby中有四种作用域:局部变量、实例变量、类变量和全局变量。理解它们的作用范围对于避免潜在问题至关重要。 控制结构包括条件语句(如if、unless、case)和循环(如for、while、until、each)。Ruby还支持...
`Module#define_method`用于动态定义方法,`Object#methods`和`Object#instance_variables`则分别用于查看对象的方法列表和实例变量。 例如,如果我们想为数组添加一个新的方法,允许我们查找最小值,可以这样做: ...
Ruby中的变量有几种形式,分别是局部变量、实例变量、类变量、全局变量,对于初学者来说,常常容易搞混,尤其像本人这种做java的,理解起来还是头痛,经过仔细辨别学习,将这几种变量的差异及使用场景总结如下: ...
- **类与对象**:介绍如何定义类、创建对象以及使用实例变量和方法。 - **继承与多态**:探讨Ruby中的继承机制以及如何实现多态性。 - **模块与混入**:解释模块的概念及其在代码复用中的作用;讨论混入(Mix-in)的...
实例变量名以@开始,每个实例对象有各自不同的实例变量; 2、类变量在使用前必须初始化,否则在使用时会报错;而实例变量如果没有初始化,则使用时返回nil; 3、类变量是私有的,在类外无法直接访问,可以通过类方法和实例...
ActiveRecord中的验证是通过定义在模型类上的验证方法来实现的,这些方法检查实例变量(如密码)是否满足特定条件。为了验证密码强度,我们需要自定义一个验证器或者使用现有的gem,比如`password_strength_...
在Ruby中,代码可能更加面向对象,通过定义`Man`和`Woman`类,使用实例变量来保存偏好列表和当前匹配,以及方法来执行求婚和比较操作。 下载并解压"Gale-Shapley-Algorithm-master"文件后,你可以查看源代码,了解...
1. **基础语法**:包括变量(局部、实例、类和全局)、常量、运算符、流程控制(条件语句和循环)、方法定义以及异常处理等。 2. **面向对象编程**:Ruby是面向对象的,所有一切都是对象。书中详述了类、对象、继承...
- **访问器方法**:用于从类的外部获取对象的实例变量的值。 ```ruby class Box def initialize(width, height) @width = width @height = height end def width @width end def height @height end ...
其次,Ruby 1.9对语法进行了一些调整,例如,变量声明前的符号从`$`改为`@`或`@@`,以更清晰地区分实例变量和类变量。此外,Ruby 1.9还引入了新的内建数据结构,如Symbol表和Fixnum/Bignum的合并,提高了性能。 ...
变量 类和实例变量的Variable对象Ruby 已经有了Method对象,为什么还没有Variable对象呢?为什么? 一些与类和实例变量交互的方法已经存在: Module#class_variable_defined? Module#class_variable_get Module#...
本文将详细介绍 Ruby 中的五种主要变量类型:普通变量、全局变量、实例变量、类变量以及常量,并通过示例代码加深理解。 #### 二、Ruby中的变量类型详解 ##### 1. 普通变量 (Variable) - **定义与使用**: - 普通...
总结来说,Ruby的方法和类是其面向对象特性的核心。方法提供了代码的重用,而类则定义了对象的结构和行为。通过继承和模块,Ruby提供了灵活的代码组织和扩展机制,使得开发者能够构建出复杂的、可维护的软件系统。
在Ruby中,可以通过定义类和实例变量来实现封装。例如,如果有一个`Person`类,可以定义实例变量`@name`、`@age`等,并提供方法来访问这些变量,而不是直接允许外部代码直接修改这些变量。 - **继承**:继承使得一个...
在这个例子中,`@cust_id`、`@cust_name` 和 `@cust_addr` 都是实例变量。 ##### 4. 类变量 (Class variable) 类变量以 `@@` 开头,用于在类的所有实例之间共享数据。它们不仅在整个类中可见,而且在类的所有子类...