0
私はサブクラス化のために構築されたクラスを持っています。Rubyで以前に与えられたブロックを実行するメソッドを作成するには?
class A
def initialize(name)
end
def some
# to define in subclass
end
end
# usage
p A.new('foo').some
#=> nil
私の場合、インスタンスが1つだけ必要なので、サブクラスを作成したくありません。したがって、次の使用方法をサポートするようにinitialize
メソッドを変更します。
p A.new('foo') { 'YEAH' }.some
#=> YEAH
上記の使用方法をどのようにサポートできますか?
私はRuby 1.8.7プロジェクトで以下の解決策を見つけましたが、彼らは私には奇妙に見えます。
class A
def singleton_class
class << self; self; end
end
def initialize(name, &block)
@name = name
self.singleton_class.send(:define_method, :some) { block.call } if block_given?
end
def some
# to define in subclass
end
end