您的位置:首页 > 编程语言 > Ruby

Ruby-类和对象

2016-03-13 20:20 323 查看
ruby是一种面向对象编程语言,具有面向对象的特性:封装、抽象、继承和多态性。

1.1 类

在Ruby中,类以关键字
class
开始,后面跟类名(应大写),以
end
结束。例如:

class Customer
#...
end


1.2 变量

ruby提供四种类型的变量:

①局部变量:局部变量是在方法中定义的变量。局部变量在方法外是不可用的。局部变量以小写字母或
_
开始。未初始化的变量值为nil。

②实例变量:实例变量可以跨任何特定的实例或对象中的方法使用。这意味着,实例变量可以从对象到对象的改变。实例变量以
@
开头。未初始化的变量值为nil。

③类变量:类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性,并被共享在整个继承链中。类变量以
@@
开头。必须初始化之后才能够在方法中使用。

④全局变量:类变量不能跨类使用。如果您想要有一个可以跨类使用的变量,您需要定义全局变量。全局变量以
$
开头。

看到这里可能胡迷糊,不怕,给你举几个例子,记得运行看一下结果哦。

局部变量对的例子:

i0 = 1
loop {
i1 = 2  #局部变量
puts defined?(i0)
puts defined?(i1)
break
}


跟我们平时理解的局部变量的含义一致。

实例变量的例子如下:

class Customer
def initialize(id, name, addr)
@cust_id=id
@cust_name=name
@cust_addr=addr
end
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
end

# Create Objects
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.display_details()
cust2.display_details()


说明一下:

①initialize()类似构造函数。如果定义多个initialize(),以最后一个为准。

②当您想要在一个单行上显示实例变量的文本和值时,您需要在 puts 语句的变量名前面放置符号(#)。文本和带有符号(#)的实例变量应使用双引号标记。

有点像获取一个对象的属性。

类变量的例子如下:

class Customer
@@no_of_customers=0
def initialize(id, name, addr)
@cust_id=id
@cust_name=name
@cust_addr=addr
end
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
def total_no_of_customers()
@@no_of_customers += 1
puts "Total number of customers: #@@no_of_customers"
end
end

# Create Objects
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.total_no_of_customers()
cust2.total_no_of_customers()


类变量可以统计类对象的数量呢。

全局变量的例子如下:

$global_variable = 10
class Class1
def print_global
puts "Global variable in Class1 is #$global_variable"
end
end
class Class2
def print_global
puts "Global variable in Class2 is #$global_variable"
end
end

class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global


1.3 常量

常量以大写字母开头。定义在类或模块内的常量可以从类或模块的内部访问,定义在类或模块外的常量可以被全局访问。

常量不能定义在方法内。引用一个未初始化的常量会产生错误。对已经初始化的常量赋值会产生警告。

class Example
VAR1 = 100
VAR2 = 200
def show
puts "第一个常量的值为 #{VAR1}"
puts "第二个常量的值为 #{VAR2}"
end
end
# 创建对象
object=Example.new()
object.show


1.4 伪变量

它们是特殊的变量,有着局部变量的外观,但行为却像常量。您不能给这些变量赋任何值。

self: 当前方法的接收器对象。

true: 代表 true 的值。

false: 代表 false 的值。

nil: 代表 undefined 的值。

FILE: 当前源文件的名称。

LINE: 当前行在源文件中的编号。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ruby