Ruby 类的构建器和实例的概念

Ruby 类的构建器和实例的概念

几个月没有复习Ruby,很多基础概念开始模糊了,看来还是很有必要写一些东西来整理思路,巩固记忆这些基础概念,顺便把一些容易记错的点写在这里,以防再次忘记。

首先要介绍的是 OOP, 它的全称呼是 Object-Oriented Programming.

Ruby为了解决复杂项目时的文件组织关系,利用了OOP的概念来构建其中的物件。

OOP = DATA + BEHAVIOR

首先来介绍Ruby中的类( class )的概念,可以把它形象地比作用来制作蛋糕的模具,用模具制作出来的众多蛋糕,我们称之为实例 ( instance )。

我们来创建一个class

class Cake
end

然后使用已经创建的 Cake 这个类(模具),来制作一个实例 cheese_cake

cheese_cake = Cake.new

上面两步我们创建了一个类,并且用这个类创建了一个实例。接下来介绍一下类内部的构建器( constructor )initialize方法。

class Cake
def initialize
end
end

实际上当你运行 Cake.new 的时候。new调用了initialize这个方法来创建实例,即使你没有写initialize,它也存在。当你希望给实例的初始状态加上一些值的时候,可以使用 instance variable ( 实例变量 )@开头的变量。在这里我们给蛋糕加上颜色这个实例变量,并赋值为red。

class Cake
def initialize
@color = "red"
end
end

然后我们再次用这个Class来创建一个实例

cheese_cake = Cake.new

然后我们来查看这个实例,会发现这个实例创建后就包含了@color=“red” 这个实例变量

cheese_cake
=> #<Cake:0x00007fd3ec11b738 @color="red">

同样构建器作为一个方法,也可以从外部传入参数,括号中color就是参数

class Cake
def initialize(color)
@color = color
end
end

cheese_cake = Cake.new("green")

cheese_cake
=> #<Cake:0x00007fe898197bb0 @color="green">

实例变量和变量的差别是什么呢?其实差别就在于实例变量的作用域是它所在的类内部,同一个类下面的方法都可以去使用其他方法内的实例变量。而普通的变量值存在于方法之中,方法运行结束后,变量也就消失了,举个例子:

class Cake
def initialize(color)
@color = color
end

def change_color
@color = "green"
end
end

我们在类之中创建了一个新的方法change_color,也给@color赋值,这时再尝试用这个方法来队实例变量进行操作,我们创建了一个@color="red" 的cheese_cake实例,然后再调用方法change_color,更改了实例变量的值,再去查看cheese_cake就会发现它的实例变量值已经被改变为@color="gree"

cheese_cake = Cake.new("red")

cheese_cake
=> #<Cake:0x00007fe898197bb0 @color="red">

cheese_cake.change_color

cheese_cake
=> #<Cake:0x00007fcd2b2bc528 @color="green">

以上就是一些关于Ruby 的构建器和实例相关的基础知识。