使用类名作为方法时调用方法

时间:2012-02-03 02:34:02

标签: 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

我想要的想法是这样的行为如下

  1. 创建方法的一个实例(作为简写)。
  2. 在此之后立即调用方法Book并执行代码块。
  3. (使用与类相同的方法的目的是在像方法一样使用时回调。)

    这可以在Ruby中使用吗?

2 个答案:

答案 0 :(得分:2)

这个怎么样?

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")

作为次要兴趣点,Ruby's Kernel module使用这种技术(用C编写)来实现名为ArrayString的方法,等等:

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

答案 1 :(得分:0)

这样的东西?

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.new "To Kill a Mocking Bird"
To Kill a Mocking Bird
=> #<Book:0x74f63f0 @name="To Kill a Mocking Bird">