注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

Ruby基本知识(三)  

2012-01-14 19:20:03|  分类: Ruby |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
song = Song.new("Paradise", "Coldplay", "4")
song.inspect
song.to_s

因为ruby的class是开放的,所以我们可以为类添加方法,覆盖掉父类的方法

class Song
    def    to_s
        "Song: #@name -- #@artist (#@duration)"
    end
end

song = Song.new("Paradise", "Coldplay", 4)
song.inspect
song.to_s

继承

class KaraokeSong < Song
    def initialize(name, artist, duration, lyrics)
        @name = name
        @artist = artist
        @duration = duration
        @lyrics = lyrics
    end
end

song = KaraokeSong.new("You are beautiful", "James Blunt", 4, "... ...")
puts song.to_s

对to_s方法进行覆盖
class KaraokeSong
    def    to_s
        super.to_s + " #@lyrics"
    end
end

song = KaraokeSong.new("You are beautiful", "James Blunt", 4, "... ...")  
puts song.to_s

为实例变量创建get和set方法
attr_reader -> get
attr_writer -> set
attr_accessor -> get and set

class KaraokeSong
    attr_accessor :name, :artist, :duration
end

song = KaraokeSong.new("You are beautiful", "James", 4, "... ...")
puts song.artist
song.artist = "James Blunt"
puts song.artist

类变量和类方法

class Song
    @@plays = 0
    def initialize(name, artist, duration)
        @name = name
        @artist = artist
        @duration = duration
        @plays = 0
    end
    
    def play
        @@plays += 1
        @plays += 1
        puts "#@name plays #@plays ---- Total: #@@plays"
    end
end

s1 = Song.new("You are beautiful", "James Blunt", "4")
s2 = Song.new("In the end", "Linkin Park", "5")

s1.play
s1.play
s2.play
s1.play
#############################################################
ruby类方法的七种写法 http://www.iteye.com/topic/378553
    class T  
      def T.class_method1  
        #第一种  
      end  
     class << self  
       def class_method2  
         #第二种  
       end  
      end  
      def self.class_method3  
        #第三种  
      end  
    end  
      
      
    def T.class_method4  
      #第四种  
    end  
      
      
    T.class_eval do  
      def T.class_method5  
        #第五种  
      end  
      def self.class_method6  
        #第六种  
      end  
    end  
    class Object  
      # The hidden singleton lurks behind everyone  
      def metaclass; class << self; self; end; end  
      def meta_eval &blk; metaclass.instance_eval &blk; end  
      # Adds methods to a metaclass  
      def meta_def name, &blk  
        meta_eval { define_method name, &blk }  
      end  
    end  
    T.meta_def :class_method7 do   
      #第七种  
    end  
    p T.singleton_methods.sort
    
    #["class_method1", "class_method2", "class_method3", "class_method4", "class_method5", "class_method6", "class_method7", "yaml_tag_subclasses?"]  
    
    
##############################################    

类的访问控制 (public protected private)
方法的默认访问控制是public

class MyClass
    def method1 #default is public
    end
   protected    #subsequent method will be 'protected'
    def method2
    end
   private         #subsequent method will be 'private'
    def method3
    end
   public        #subsequent method will be 'public'
    def method4
    end    
end


另一种定义方式
class MyClass
    def method1
    end
    ... ...
    public :method1, :method4
    protected :method2
    private :method3
end
  评论这张
 
阅读(186)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017