首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

Ruby 种

2012-09-21 
Ruby 类1. Ruby要建立新的对象,必须使用每个类的new方法。例如:ary Array.newp ary# []与java中new Ob

Ruby 类
1. Ruby要建立新的对象,必须使用每个类的new方法。
   例如:
      

        ary = Array.new        p ary             # => []       

   与java中new Object()相通,与python不同,python 直接 a = Object()。

2. 想知道对象属于哪个类,可以使用class方法:
   例如:
      
        ary = []        str = "Hello world."        p ary.class                      # => Array        p str.class                      # => String       

       和python中的__class__类似

3. 要判断一个对象是否是某个类的实例,可以使用instance_of?方法
   例如:
       
         ary = []         str = "Hello world."         p ary.instance_of?(Array)        # => true         p str.instance_of?(String)       # => true         p ary.instance_of?(String)       # => false         p str.instance_of?(Array)        # => false        

        这同python中isinstance功能类似。

4. 检查有继承关系的父类,使用is_a?
   例如:
       
         str = "This is a String"         p str.is_a?(String)          # => true         p str.is_a?(Object)          # => true        


5. 定义类:
  
    class 类名          # 类名一定要以大写字母开始      类定义    end   


6. initialize方法
   initialize方法是一个比较特殊的方法,调用new方法建立对象时,这个initialize方法会被调用;同时,传递给new的所有实参都会传给initialize方法。
   (和python的__init__方法功能类似)

7. 类实例和说明:
   Ruby不允许从对象外部直接读取,写入实例变量。所有要访问对象内部的数据,都需要定义方法来操作。
  
class HelloWorld  def initialize(myname="Ruby")    @name = myname  end  def name    return @name            # get  end  def name= (value)    @name = value           # set  endendruby = HelloWorld.newp ruby.name         # => "Ruby"ruby.name = "bob"   p ruby.name         # => "bob"class HelloWorld2  def initialize(myname="Ruby2")    @name = myname  end  attr_reader:name           # 相当与set属性endruby2 = HelloWorld2.newp ruby2.name                     # => "Ruby2"ruby2.name = "bob2"              # 8-1-class.rb:35: undefined method `name='                                  # for #<HelloWorld2:0xb77f9100 @name="Ruby2"> (NoMethodError)p ruby2.name   

定义访问属性:
定义意义attr_reader:name只定义用来读取的方法(定义name方法)attr_writer:name只定义用来写入的方法(定义name=方法)attr_accessor:name定义用来读取与写入的方法(定义上述两个方法)
  

热点排行