どうすればこれを達成できますか:
final case class ChairId(id: String)
trait GeneratorLike[TO, TC <: AbstractId] {
val prefix: String
def generate(): TC = TO.apply(prefix + "-" + UUID.randomUUID())
}
implicit object ChairIdGenerator extends GeneratorLike[ChairId.type, ChairId] {
val prefix: String = "CHAIR"
}
implicit def IdFn[TO, TC <: AbstractId](x: TO)(implicit ev: GeneratorLike[TO, TC]): GeneratorLike[TO, TC] = ev
//right now I can call:
ChairId.generate()
その状況でコンパニオン オブジェクトを定義したくありません。暗黙を使用してオブジェクトを拡張する機会があるかどうか疑問に思いましたか?
私がそうするとき (私は TypeObject として TO を使用し、TypeClass 命名として TC を使用します)、idFn[TO, TC]
TO を実装するオブジェクトにしたいのですが、def apply(id: String): TC
それを強制できますか? また、この機能を使用するにはどうすればよいですか? 型パラメーターで関数を呼び出すことはまったく不可能だと感じています:/