私はスカラーにとって少し新しいです。コンパニオンオブジェクトのメソッドを汎用クラスでどのように参照できますか?
ケースクラスのコンパニオンオブジェクトのメソッドを一般的な方法で参照するには、どのようにスカラコードを記述しますか?私はいくつかのアプローチを試してみましたが、うまくいかないようです。
以下は動作するサンプルコードですが、手動で各サブクラスを構築する必要があります。例えば
:
class One extends Act[LetterA] {
val intro = LetterA.sayhi
}
私はむしろのようなものだろう:
class AllOfThem[T <: LettersClass, S <: LettersSingleton] extends Act[T] {
val intro = S.sayhi
}
を私の作品やコンパイルされ、構文を見つけるように見えることはできません。これを行う適切な方法は何ですか?また、言語でサポートされていないものを探していますか?クラスや特性をどのように構造化しているのかは少しはっきりしていると思いますが、このような行動にどのように取り組むべきかはわかりません。
さらに、私がActクラスのメソッド 'actionTwo'でコメントしたのと似たような方法がありますか?
サンプルコードのリスト:
trait LettersSingleton {
def sayhi() : String
}
trait LettersClass {
val id : Int
}
// trait Letters extends LettersClass with LettersSingleton { }
object LetterA extends LettersSingleton {
def sayhi = "Hi I am A"
}
object LetterB extends LettersSingleton {
def sayhi = "Hi I am B"
}
case class LetterA(val id : Int) extends LettersClass { }
case class LetterB(val id : Int, val name:String) extends LettersClass { }
abstract class Act[ T <: LettersClass ] {
val intro : String
def actionOne(a : T) = {
println(a.id + " is my id")
}
def actionTwo() = {
// println(T.sayhi)
}
}
class One extends Act[LetterA] {
val intro = LetterA.sayhi
}
class Two extends Act[LetterB] {
val intro = LetterB.sayhi
}