ruby的类方法与实例方法
类方法也叫静态方法,通过类名来调用的方法。实例方法,必须要new一个实例出来才能用。
class Foo def self.bar puts 'class method' end def baz puts 'instance method' end end Foo.bar #class method #Foo.baz #报错 undefined method `baz' for Foo:Class (NoMethodError) Foo. new .baz #instance method #Foo.new.bar #报错 undefined method `bar' for #<foo:0x2d61a1c> (NoMethodError) </foo:0x2d61a1c> |
当中bar就是类方法,看它是如何定义的:def self.bar,self就是指向当前的类。而对于实例方法,就很简单:def baz。
像ruby这样灵活的脚本语言不多见,它提供了多种定义类方法的手段。
# Way 1 class Foo def self.bar puts 'class method' end end Foo.bar # "class method" # Way 2 class Foo class << self def bar puts 'class method' end end end Foo.bar # "class method" # Way 3 class Foo; end def Foo.bar puts 'class method' end Foo.bar # "class method" |
第一种与第三种方式不细说了,self的运用就相当于javascript的this。第二种有种自继承的意味。通过我们添加多个类方法时就少写几个self,非常优雅。
再看实例方法,这也有几套方案:
# Way 1 class Foo def baz puts 'instance method1' end end Foo. new .baz # "instance method1" puts '---------------' # Way 2 class Foo attr_accessor :baz end foo = Foo. new foo.baz = 'instance method2' puts foo.baz # "instance method2" puts '---------------' # Way 3 class Foo; end foo = Foo. new def foo.lazy puts 'instance method3' end foo.lazy # "instance method3" |
第一种直接定义,第二种用到attr_accessor语法糖,第三种是极晚绑定,此方法只对那一个实例有效。
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码


机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步