Ruby中类方法的定义

Ruby中类方法的定义

方法的接受者就是类本身(类对象)的方法成为类方法。类方法的几种形式如下:

#1.在class <<类名 ~end 这个特殊的类定义中,以定义实例方法的形式来定义类方法
class << HelloMethod
    def SayHello(name)
        puts "#{name} say hello"
    end
end
HelloMethod.SayHello("Bob")

#2.在class上下文中使用self时,引用的对象是该类本身,因此可以使用class << self ~ end来定义

class ClassMethod
  class << self
    def Hello(name)
      puts "#{name} say hello!"
    end
  end
end
ClassMethod.Hello("Bob")

#3.使用def 类名.方法名 ~end 这样的形式来定义类方法
class ClassMethod
    def ClassMethod.SayHello(name)
        puts "#{name} say hello"
    end
end
ClassMethod.SayHello("Ruby")
#4.同样类似第二种方法一样使用self
class ClassMethod
  def self.SayHello(name)
    puts "#{name} say hello"
  end
end
ClassMethod.SayHello("Bob")

如果以为就是上面三种方法的话,那就大错特错了。上网查资料的时候发现还有下面这种方法: =。=

class ClassMethod
    ClassMethod.instance_eval do
        def SayHello(name)
            puts "#{name} say hello"
        end
    end
end

使用extend关键字扩展类方法。

module ClassMethod
  def cmethod
      "Class Method"
  end
end
class MyClass
  extend ClassMethod
end
p ClassMethod.cmethod #=>"Class Method"

类方法定义:方法的接收者是类本身的方法成为类方法。在Ruby中,所有类本身都是Class类的对象,所以可以把类方法理解为:

  • Class类的实例方法
  • 类对象的单例方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,510评论 19 139
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,845评论 0 9
  • 一、异同对比选择1、Python和ruby的相同点: * 都强调语法简单,都具有更一般的表达方式。python是缩...
    沃伦盖茨阅读 9,626评论 2 24
  • 真是偷的浮生半日闲,就算是短短的中午时间,只有三十分钟,我也要把他利用起来,比如思考下今天所作所为,每天都多次反思...
    平平无奇小个子阅读 1,131评论 0 0
  • 杭州的秋天真的很短,让你很不防的来了,也很不防的走了,于是便觉得夏天也远了。可是远去的似乎不只有暑热,还有那些日子...
    瑞安妈妈阅读 2,761评论 0 0