Ruby Programming/Classes and objects

维基教科书,自由的教学读本
跳到导航 跳到搜索

← Writing methods | Exceptions →

Ruby 类别[编辑]

在Ruby中任何东西都是物件。每个物件都有个类别。找出一个物件的类别只要呼叫物件的class方法即可,来看看这个范例:

   puts "This is a string".class
   puts 9.class
   puts ["this","is","an","array"].class
   puts {:this => "is", :a => "hash"}.class
   puts :symbol.class

不论如何,你都应该已经知道了这个。你目前还不知道的只是如何建立你自己的类别跟延伸Ruby内建的类别。

建立类别实体[编辑]

一个类别实体是一个该类别的物件,举例来说,"chocolate"是一个字串类别实体。你已经知道你可以建立字串、阵列、杂凑(hashes)、数值(numbers)与其他内建的型态透过引号(双引号或单引号)、中括号、大括号等等,但你也可以透过new方法来建立它们。 举例来说,my_string = ""等同于my_string = String.new 每个类别都有一个new方法:阵列、杂凑、整数,不论是什么都一样。当你建立你自己的类别时,你也会使用new方法来建立实体。

建立类别[编辑]

类别意味著是一个物件的型态,就像是一本书,一只鲸鱼,一个葡萄或者是巧克力。每个人都爱巧克力,所以我们来建立一个巧克力类别:

  class Chocolate
      def eat
          puts "That tasted great!"
      end
  end

来看看这个。类别是透过class保留字来建立的,紧接著是类别的名字。所有的类别名称都必须以大写英文开头。大部分我们都会用CamelCase(骆驼拼写法)来替类别命名。所以我们可以建立一个像是PieceOfChocolate的类别,但是不能写成Piece_of_Chocolate

接下来就是定义类别方法。一个类别方法是一个类别中个别定义的方法,举例来说,String类别有一个length方法:

  # 輸出 "5"
  puts "hello".length

呼叫一个巧克力类别实体的eat方法,我们会这样写:

  my_chocolate = Chocolate.new
  my_chocolate.eat # 輸出 "That tasted great!"

你也可以透过send来呼叫方法

  "hello".send(:length) # 輸出 "5"
  my_chocolate.send(:eat) # 輸出 "That tasted great!"

然而,使用send是比较好的方法,