Ruby学习笔记(02)_类和对象
来源:互联网 发布:软件项目汇报 编辑:程序博客网 时间:2024/05/18 00:03
- Ruby 是一种完美的面向对象编程语言。面向对象编程语言的特性包括:
1.数据封装
- 2.数据抽象
- 3.多态性
- 4.继承
实例:
Class Vehicle{ Number no_of_wheels Number horsepower Characters type_of_tank Number Capacity Function speeding { } Function driving { } Function halting { }}
Ruby中定义类
在 Ruby 中,类总是以关键字 class 开始,后跟类的名称。类名的首字母应该大写。类 Customer 如下所示:
class Customerend
Ruby 类中的变量
Ruby提供了4中变量
- 局部变量:局部变量是在方法中定义的变量。局部变量在方法外是不可用的。在后续的章节中,您将看到有关方法的更多细节。局部变量以小写字母或 _ 开始。
- 实例变量:实例变量可以跨任何特定的实例或对象中的方法使用。这意味着,实例变量可以从对象到对象的改变。实例变量在变量名之前放置符号(@)。
- 类变量:类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性。类变量在变量名之前放置符号(@@)。
- 全局变量:类变量不能跨类使用。如果您想要有一个可以跨类使用的变量,您需要定义全局变量。全局变量总是以美元符号($)开始。
Ruby 中使用new方法创建对象
cust1 = Customer. newcust2 = Customer. new
自定义方法来创建 Ruby 对象
给方法new传递参数, 这些参数用于初始化类变量
当想声明带参数的new方法时, 需要在创建类的同时声明方法initialize. initialize方法是一种特殊类型的犯法,将在调用带参数的类的new方法时执行
class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr endendcust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")cust2=Customer.new("2", "Poul", "New Empire road, Khandala")
Ruby 类中的成员函数
在 Ruby 中,函数被称为方法。类中的每个方法是以关键字 def 开始,后跟方法名。
方法名总是以小写字母开头。在 Ruby 中,您可以使用关键字 end 来结束一个方法。
#!/usr/bin/rubyclass Sample def hello puts "Hello Ruby!" endend# 使用上面的类来创建对象object = Sample. newobject.hello
例子
#!/usr/bin/rubyClass 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" endend#创建对象cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")cust2=Customer.new("2", "Poul", "New Empire road, Khandala")# 调用方法cust1.display_details()cust1.total_no_of_customers()cust2.display_details()cust2.total_no_of_customers()
运行结果:
Customer id 1Customer name JohnCustomer address Wisdom Apartments, LudhiyaTotal number of customers: 1Customer id 2Customer name PoulCustomer address New Empire road, KhandalaTotal number of customers: 2
对象的同一性
所有的对象都有标识和值。
标识(ID)用来表示对象同一性。Ruby 中所有对象都是唯一的,对象的 ID 可以通过 object_id(或者 id)方法取得。
ary1 = []ary2 = []p ary1.object_id #=> 67653636p ary2.object_id #=> 67650432
我们用 equal? 方法判断两个对象是否同一个对象(ID 是否相同)。
str1 = "foo"str2 = str1str3 = "f" + "o" + "o"p str1.equal?(str2) #=> truep str1.equal?(str3) #=> false
对象的“值”就是对象拥有的信息。例如,只要对象的字符串内容相等,Ruby 就会认为对象的值相等。Ruby 使用 == 来判断对象的值是否相等。
str1 = "foo"str2 = "f" + "o" + "o"p str1 == str2 #=> true
除了 == 以外,Ruby 还提供 eql? 方法用来判断对象的值是否相等。== 与 eql? 都是 Object 类定义的方法,大部分情况下它们的执行结果都是一样
的。但也有例外,数值类会重定义 eql? 方法,因此执行后有不一样结果。
p 1.0 == 1 #=> truep 1.0.eql?(1) #=> false
凭直觉来讲,把 1.0 与 1 判断为相同的值会更加方便。在一般情况进行值的比较时使用 ==,但是在一些需要进行更严谨的比较的程序中,就需要用到
eql? 方法。例如,0 与 0.0 作为散列的键时,会判断为不同的键,这是由于散列对象内部的键比较使用了 eql? 方法来判断。
hash = { 0 => "0"}p hash[0.0] #=> nilp hash[0] #=> "0"
- Ruby学习笔记(02)_类和对象
- Ruby学习笔记_对象过程
- Ruby学习笔记(16)_面对对象
- 类和对象_学习笔记
- Ruby学习笔记_单元测试
- Ruby学习笔记(01)_基本概念和字符串
- Ruby学习笔记(15)_文件输入和输出
- java学习笔记1_对象和类
- Ruby学习笔记_异常处理rescue
- Ruby学习笔记(03)_变量
- Ruby学习笔记(04)_判断
- Ruby学习笔记(05)_循环
- Ruby学习笔记(07)_块
- Ruby学习笔记(08)_模块Module
- Ruby学习笔记(09)_数组
- Ruby学习笔记(12)_范围Range
- Ruby学习笔记(13)_迭代器
- Ruby学习笔记(14)_异常
- hdu 2089 不要62
- ubuntu下面使用tcpping
- [DP]51 Nod 1597——有限背包计数问题
- 【Socket编程】非阻塞connect
- python-打包python为exe应用
- Ruby学习笔记(02)_类和对象
- luogu1993 小 K 的农场
- QT5 没办法引用 QTcpSocket 问题的解决
- Redis为什么使用单进程单线程方式也这么快
- 省市二级级联json数据
- getline()函数
- 中文问题
- [带有虚点的LCT] BZOJ 4573: 大森林
- 数据分析 起步 (一) MongoDB+Hadoop