私のスカラ コードでは、新しいクラスをインスタンス化できるようにしたいと考えています。たとえば、次のコードがあるとします。
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
出来ますか?