次の例を考えてみましょう。これは 8 を出力するはずです。なぜ はそれが文字列であるべきだとA.Value + B.Value
考えるのでしょうか? B.Value
どうすれば修正できますか?
object Catano extends App {
val const3 = new Constant(3)
val const5 = new Constant(5)
val block = new Arithmetic(const3.Result, const5.Result)
println(block.Sum.Value)
}
class Block
class Arithmetic[T: Numeric](val A: Connector[T], val B: Connector[T]) extends Block {
def Sum = new Connector({ A.Value + B.Value })
}
class Constant[T](x: T) extends Block {
def Result = new Connector({ x })
}
class Connector[T](f: => T) {
def Value: T = f
}
タイプ セーフの理由から、以下は Type 例外で失敗するはずです。
val const3 = new Constant("ping")
val const5 = new Constant("pong")
val block = new Arithmetic(const3.Result, const5.Result)