Ruby学习笔记(02)_类和对象

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 Customer
end

Ruby 类中的变量

Ruby提供了4中变量

  • 局部变量:局部变量是在方法中定义的变量。局部变量在方法外是不可用的。在后续的章节中,您将看到有关方法的更多细节。局部变量以小写字母或 _ 开始。
  • 实例变量:实例变量可以跨任何特定的实例或对象中的方法使用。这意味着,实例变量可以从对象到对象的改变。实例变量在变量名之前放置符号(@)。
  • 类变量:类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性。类变量在变量名之前放置符号(@@)。
  • 全局变量:类变量不能跨类使用。如果您想要有一个可以跨类使用的变量,您需要定义全局变量。全局变量总是以美元符号($)开始。

Ruby 中使用new方法创建对象

cust1 = Customer. new
cust2 = 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
   end
end
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

Ruby 类中的成员函数

在 Ruby 中,函数被称为方法。类中的每个方法是以关键字 def 开始,后跟方法名。
方法名总是以小写字母开头。在 Ruby 中,您可以使用关键字 end 来结束一个方法。

#!/usr/bin/ruby

class Sample
   def hello
      puts "Hello Ruby!"
   end
end

# 使用上面的类来创建对象
object = Sample. new
object.hello

例子

#!/usr/bin/ruby
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
end
#创建对象
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 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Total number of customers: 1
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala
Total number of customers: 2

对象的同一性

所有的对象都有标识和值。
标识(ID)用来表示对象同一性。Ruby 中所有对象都是唯一的,对象的 ID 可以通过 object_id(或者 id)方法取得。

ary1 = []
ary2 = []
p ary1.object_id #=> 67653636
p ary2.object_id #=> 67650432

我们用 equal? 方法判断两个对象是否同一个对象(ID 是否相同)。

str1 = "foo"
str2 = str1
str3 = "f" + "o" + "o"
p str1.equal?(str2) #=> true
p 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 #=> true
p 1.0.eql?(1) #=> false

凭直觉来讲,把 1.0 与 1 判断为相同的值会更加方便。在一般情况进行值的比较时使用 ==,但是在一些需要进行更严谨的比较的程序中,就需要用到
eql? 方法。例如,0 与 0.0 作为散列的键时,会判断为不同的键,这是由于散列对象内部的键比较使用了 eql? 方法来判断。

hash = { 0 => "0"}
p hash[0.0] #=> nil
p hash[0] #=> "0"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值