• 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 # (NoMethodError)
    

    当中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语法糖,第三种是极晚绑定,此方法只对那一个实例有效。

  • 相关阅读:
    身份证号码验证(转)
    《编写有效用例》读书笔记2
    《编写有效用例》读书笔记3
    1
    《实例化需求:团队如何交付正确的软件》阅读笔记3
    《实例化需求:团队如何交付正确的软件》阅读笔记2
    《实例化需求:团队如何交付正确的软件》阅读笔记1
    项目目标文档
    系统利益相关者描述
    《代码阅读方法与实践》阅读笔记3
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1701780.html
Copyright © 2020-2023  润新知