Ruby中的类编程

1.在Ruby中定义类

在 Ruby 中,类总是以关键字 class 开始,后跟类的名称。类名的首字母应该大写。

class 类名
    类的定义
end

类 Customer 如下所示:

class Customer
end
您可以使用关键字 end 终止一个类。类 中的所有数据成员都是介于类定义和 end 关键字之间。


2.Ruby类中的变量声明和定义

Ruby 提供了四种类型的变量:

(1)局部变量

局部变量是在方法中定义的变量。局部变量在方法外是不可用的。在后续的章节中,您将看到有关方法的更多细节。局部变量以小写字母或 _ 开始。

(2)实例变量

实例变量可以跨任何特定的实例或对象中的方法使用。这意味着,实例变量可以从对象到对象的改变。实例变量在变量名之前放置符号(@)。

(3)类变量

类变量可以跨不同的对象使用。类变量属于类,且是类的一个属性。类变量在变量名之前放置符号(@@)。

(4)全局变量

类变量不能跨类使用。如果您想要有一个可以跨类使用的变量,您需要定义全局变量。全局变量总是以美元符号($)开始。


3.创建类的对象实例

       对象是类的实例。现在您将学习如何在 Ruby 中创建类的对象。在 Ruby 中,您可以使用类的方法 new 创建对象。方法 new 是一种独特的方法,在 Ruby 库中预定义。new 方法属于类方法。

      下面的实例创建了类 Customer 的两个对象 cust1 和 cust2:

cust1 = Customer.new
cust2 = Customer.new
      在这里,cust1 和 cust2 是两个对象的名称。对象名称后跟着等号(=),等号后跟着类名,然后是点运算符和关键字 new。

      可以给方法 new 传递参数,这些参数可用于初始化类变量。当想要声明带参数的 new 方法时,您需要在创建类的同时声明方法 initialize。initialize 方法是一种特殊类型的方法,将在调用带参数的类的 new 方法时执行。

      下面的实例创建了 initialize 方法:

class Customer
   @@no_of_customers=0
   def initialize(id, name, addr)
      @cust_id=id
      @cust_name=name
      @cust_addr=addr
   end
end
        在本实例中,您可以声明带有 id、name、addr 作为局部变量的 initialize方法。在这里,def 和 end 用于定义 Ruby 方法 initialize。在 initialize 方法中,把这些局部变量的值传给实例变量 @cust_id、@cust_name 和 @cust_addr。在这里,局部变量的值是随着 new 方法进行传递的。

        现在可以创建对象,如下所示:

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


4.Ruby类中的实例方法的定义和使用
        在 Ruby 中,函数被称为方法。类中的每个方法是以关键字 def 开始,后跟方法名。方法名总是以小写字母开头。在 Ruby 中,您可以使用关键字 end 来结束一个方法。
        下面的实例定义了一个 Ruby 方法:

class Sample
   def function
      statement 1
      statement 2
   end
end
        在这里,statement 1 和 statement 2 是类 Sample 内的方法 function 的主体的组成部分。这些语句可以是任何有效的 Ruby 语句。下面的实例将创建类 Sample 的一个对象,并调用 hello 方法:

#!/usr/bin/ruby

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

# 使用上面的类来创建对象
object = Sample. new
object.hello
       这将会产生下面的结果:

Hello Ruby!

5.ruby中类方法的定义和使用

ruby中类方法有如下几种方式来定义:

(1)class << 类名 ~ end

我们在 class <<  类名 ~ end 这个特殊的类定义中,以定义实例方法的形式来定义类方法。实例如下:

class << HelloWorld
    def hello(name)
        puts "#{name} said hello."
    end
end

HelloWorld.hello("John")

备注:class << 类名 ~ end 这种写法的类定义称为单例类定义,单例类定义中定义的方法称为单例方法。

(2)class << self ~ end

在 class 上下文中使用 self 时,引用的对象是该类本身,因此,我们可以使用 class << self ~ end 这样的形式,在 class 上下文中定义类方法。示例如下:

class HelloWorld
    class << self
        def hello(name)
            puts "#{name} said hello."
        end
    end
end
(3)def 类名.方法名 ~ end

可以使用 def 类名 . 方法名 ~ end 这样的形式来定义类方法。

def HelloWorld.hello(name)
    puts "#{name} said hello."
end

HelloWorld.hello("John")
(4)def self.方法名 ~ end

实例如下:

class HelloWorld
    def self.hello(name)
        puts "#{name} said hello."
    end
end


6.类的初始化方法initialize 

使用 new 方法生成新的对象时,initialize 方法会被调用,同时 new 方法的参数也会被原封不动地传给initialize 方法。因此初始化对象时需要的处理一般都写在这个方法中。举例如下:

def initialize(myname = "Ruby") 
    @name = myname # 初始化实例变量
end
在这个例子中,initialize 方法接受了参数 myname。因此,
bob = HelloWorld.new("Bob")
像这样,就可以把 "Bob" 传给 initialize 方法生成对象。由于 initialize 方法的参数指定了默认值 "Ruby",因此,像下面这样没有指定参数时,
ruby = HelloWorld.new
会自动把 "Ruby" 传给 initialize 方法。


7.限制方法的调用

Ruby 提供了 3 种方法的访问级别,我们可以按照需要来灵活调整。

public  ---以实例方法的形式向外部公开该方法
private  ---在指定接收者的情况下不能调用该方法(只能使用缺省接收者的方式调用该方法,因此无法从实例的外部访问)
protected  ---在同一个类中时可将该方法作为实例方法调用
举例说明如下:

class AccTest
    def pub
        puts "pub is a public method."
    end
     
    public :pub # 把pub 方法设定为public(可省略)

    def priv
        puts "priv is a private method."
    end
   
    private :priv # 把priv 方法设定为private
end     

acc = AccTest.new
acc.pub
acc.priv
AccTest 类的两个方法中,pub 方法可以正常调用,但是在调用 priv 方法时程序会发生异常

8.类的继承

类的继承的格式如下:

class 类名 < 父类名
    类定义
end
举例来说:

class RingArray < Array # 指定父类
    def [](i) # 重定义运算符[]
        idx = i % size # 计算新索引值
        super(idx) # 调用父类中同名的方法
    end     
end     

wday = RingArray["日", "月", "火", "水", "木", "金", "土"]
p wday[6]
p wday[11]
p wday[15]
p wday[-1]



学习资料来源于:

http://www.runoob.com/ruby/ruby-class.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值