이 관용구는 계단 책에 꽤 몇 번 나타납니다 텍스트 책에서 몇 가지 포인트를 만들려고 노력 외에"val a : A = new B"무엇이 요점입니까? (?)
val b:A = new B
또는
val b = new B
val b2:A = b
을, 당신은 왜를 선언 할 것 유추 한 타입과 다른 타입입니까?
그런데이 이름은 무엇입니까?
이 관용구는 계단 책에 꽤 몇 번 나타납니다 텍스트 책에서 몇 가지 포인트를 만들려고 노력 외에"val a : A = new B"무엇이 요점입니까? (?)
val b:A = new B
또는
val b = new B
val b2:A = b
을, 당신은 왜를 선언 할 것 유추 한 타입과 다른 타입입니까?
그런데이 이름은 무엇입니까?
필자는 인터페이스 프로그래밍에 대한 관용구와 유사하다고 주장한다.
val b:A = new B
을함으로써 당신은 그 시점 후 A
에 의해 제공되는 인터페이스보다 더 아무것도에 의존하지 않는 있는지 확인하십시오. 즉, b:A = new C
으로 변경하기로 결정하면 아무 것도 깨지지 않을 것입니다.
나는 Liskov 대체 원리 (http://en.wikipedia.org/wiki/Liskov_substitution_principle)라고 불렀다. – thoredge
나는 그것이 서로 다르다고 말할 것이다. 그러나 다르다. 명시 적으로 'b'유형을 제공한다고해서 'new B'에서 'new C'로 갈 때 프로그램의 동작이 동일하게 유지되는 것을 보장하지는 않습니다. Liskov 대체 원리는보다 개념적/고차원적인 개념 인 것으로 보인다. – aioobe
이것을 _type ascription_이라고합니다. 'b : A'를 선언함으로써 타입'A'를 타입 B의 값으로 변환합니다. 당신은 사실, "내가 아는 한이 일은 단지 A"라고 말하고 있습니다. 선언을'val b = new B : A'라고 쓸 수도 있습니다. –
그것은 유용 할 수 있습니다
더 복잡한 인스턴스화의 경우 유추 된 유형이 올바른지 확인합니다. 예를
sealed trait Answer
case object Yes extends Answer
case object No extends Answer
scala> val a = List(Yes, Yes, No)
a: List[Product with Serializable with Answer] = List(Yes, Yes, No)
scala> val b: List[Answer] = List(Yes, Yes, No)
b: List[Answer] = List(Yes, Yes, No)
를 들어 나는이 다형성을 – maxmc
@maxmc라고하지만 객체가 여전히없이 다형성 될 것이다라고 말하고 싶지만 .. –
@maxmc 당신은이 다형성을 얼마나 정확하게에 정교한 것이다 : -? pst처럼 나는 또한 이것이 다형성에 의해 의미되는 것과 정확히 같지 않다고 믿는다 ... –