0

サブクラス化用に作成されたクラスがあります。

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
4

1 に答える 1