How do I make a class whose constructor looks like the constructor of a built-in class?

前端 未结 2 1410
-上瘾入骨i
-上瘾入骨i 2020-12-21 06:02

Complex is a built-in class. To make a Complex object, I write:

Complex(10, 5)

But if I create my own class

相关标签:
2条回答
  • 2020-12-21 06:23

    Complex can refer to either the Complex class, or to the Complex method defined in Kernel:

    Object.const_get(:Complex) #=> Complex
    Object.method(:Complex)    #=> #<Method: Class(Kernel)#Complex>
    

    The latter is called a global method (or global function). Ruby defines these methods in Kernel as both, private instance methods:

    Kernel.private_instance_methods.grep /^[A-Z]/
    #=> [:Integer, :Float, :String, :Array, :Hash, :Rational, :Complex]
    

    and singleton methods:

    Kernel.singleton_methods.grep /^[A-Z]/
    #=> [:Integer, :Float, :String, :Array, :Hash, :Rational, :Complex]
    

    Just like any other method in Kernel:

    These methods are called without a receiver and thus can be called in functional form

    You can use module_function to add your own global method to Kernel:

    class Thing
    end
    
    module Kernel
      module_function
    
      def Thing
        Thing.new
      end
    end
    
    Thing          #=> Thing                      <- Thing class
    Thing()        #=> #<Thing:0x007f8af4a96ec0>  <- Kernel#Thing
    Kernel.Thing() #=> #<Thing:0x007fc111238280>  <- Kernel::Thing
    
    0 讨论(0)
  • 2020-12-21 06:33
    class Dog
      def initialize(name)
        @name = name
      end
    
      def greet
        puts 'hello'
      end
    end
    
    
    def Dog(x)
      Dog.new(x)  #Create a new instance of the Dog class and return it.
    end
    
    
    d = Dog("Rover")
    d.greet
    
    --output:--
    hello
    
    0 讨论(0)
提交回复
热议问题