7

私のスカラ コードでは、新しいクラスをインスタンス化できるようにしたいと考えています。たとえば、次のコードがあるとします。

class Foo { def foo=10 }
trait Bar { val bar=20 }

理想的には、次のようなことができるようになりたいです。

def newInstance[A <: Foo] = { new A with Bar }
newInstance[Foo]

しかし、もちろんこれはうまくいきません。リフレクションを使用してクラスをインスタンス化しようとしましたが、新しいクラスをインスタンス化することしかできないようです (そして、特性とミックスインすることはできません)。マクロを使用してこれを機能させることは可能だと思いますが、どこから始めればよいかさえわかりません。

私がやろうとしているのは、次の Ruby コードのようなものです。

class SomeClass
  def create
    self.class.new
  end
end

class Other < SomeClass
end

Other.new.create # <- this returns a new Other instance

出来ますか?

4

1 に答える 1