다음 예제를 고려해보십시오. 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
}
, 타입 예외로 실패 할 경우 다음과 같은 :
val const3 = new Constant("ping")
val const5 = new Constant("pong")
val block = new Arithmetic(const3.Result, const5.Result)
'scala.math.Numeric.Implicits_'를 가져온다면, 이것은 8을 인쇄합니다. 또한, 대문자 사용은 분명히 C# -ish입니다. 멤버'val'과'def'는 일반적으로 소문자로 시작합니다. – Dylan