Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 当类名用作方法时调用方法_Ruby_Class_Methods_Callback - Fatal编程技术网

Ruby 当类名用作方法时调用方法

Ruby 当类名用作方法时调用方法,ruby,class,methods,callback,Ruby,Class,Methods,Callback,我想知道是否可以在Ruby中定义一个类,使其具有以下用途: Class Book def Book puts self.to_s end def initialize(name) @name = name end def to_s @name.to_s end end 用法: Book "To Kill a Mocking Bird" #=>To Kill a Mocking Bird

我想知道是否可以在Ruby中定义一个类,使其具有以下用途:

Class Book
    def Book
        puts self.to_s 
    end
    def initialize(name)
        @name = name
    end
    def to_s
        @name.to_s
    end
end
用法:

Book "To Kill a Mocking Bird"   #=>To Kill a Mocking Bird
我想要的想法是,它的行为如下

  • 将创建该方法的实例(简称)
  • 之后会立即调用方法手册并执行代码块
  • (将该方法命名为与类相同的方法的目的是在将其用作方法时进行回调。)

    这在Ruby中可能吗?

    类似的东西

    class Book
        def show_me
            puts self.to_s 
        end
        def initialize(name)
            @name = name
            show_me
        end
        def to_s
            @name.to_s
        end
    end
    
    show_me将被执行,但一旦您创建了一本新书,book对象将在末尾返回

    >> Book.new "To Kill a Mocking Bird"
    To Kill a Mocking Bird
    => #<Book:0x74f63f0 @name="To Kill a Mocking Bird">
    
    >Book.new“杀死一只知更鸟”
    杀死一只知更鸟
    => #
    
    这个怎么样

    class Book
      attr_accessor :name
    
      def initialize(name)
        self.name = name
      end
    
      def to_s
        name
      end
    end
    
    def Book(name)
      Book.new(name)
    end
    
    puts Book("To Kill a Mocking Bird")
    

    作为次要关注点,使用这种技术(用C编写)来实现名为
    Array
    String
    的方法,等等:

    Array(12)          #=> [12]
    String(12)         #=> '12'
    Integer('0x12')    #=> 18
    

    @JimPedid,别忘了投票/接受好的答案。您可以在中阅读有关接受答案的内容