Rails类<< self

xpe*_*int 34 ruby class

我想了解class << self下一个例子中的含义.

module Utility
  class Options #:nodoc:
    class << self
      def parse(args)          
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

mač*_*ček 46

这个

module Utility
  class Options #:nodoc:
    class << self
      # we are inside Options's singleton class
      def parse(args)

      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

相当于:

module Utility
  class Options #:nodoc:
    def Options.parse(args)

    end
  end
end
Run Code Online (Sandbox Code Playgroud)

一些例子可以帮助您理解:

class A
  HELLO = 'world'
  def self.foo
    puts "class method A::foo, HELLO #{HELLO}"
  end

  def A.bar
    puts "class method A::bar, HELLO #{HELLO}"
  end

  class << self
    HELLO = 'universe'
    def zim
      puts "class method A::zim, HELLO #{HELLO}"
    end
  end

end
A.foo
A.bar
A.zim
puts "A::HELLO #{A::HELLO}"

# Output
# class method A::foo, HELLO world
# class method A::bar, HELLO world
# class method A::zim, HELLO universe
# A::HELLO world
Run Code Online (Sandbox Code Playgroud)

  • @xpepermint,`self.parse(args)`,是的.(不是`,`) (4认同)
  • 与def self,parse(args)相同? (2认同)

Fra*_*rar 5

这是一个本征类。这个问题已经被问过了

  • 现在正式称为singleton_class:http://github.com/ruby/ruby/blob/trunk/object.c#L166 (3认同)