[SCALA] 스칼라 F-경계 유형 설명
SCALA스칼라 F-경계 유형 설명
몇 가지 예를 통과 후, 나는 내가 F-경계의 다형성이 가져 오는 이해하지 못하는 말을해야합니다.
스칼라 학교에서 예제를 사용하려면 (https://twitter.github.io/scala_school/advanced-types.html#fbounded)
그들은 서브 클래스가 하위 유형을 반환 할 수 있도록 그들이 어떤 F-경계 유형을 필요가 있다고 설명한다. 그들은 같은 것을 할 그래서 :
trait Container[A <: Container[A]] extends Ordered[A]
class MyContainer extends Container[MyContainer] {
def compare(that: MyContainer) = 0
}
하지만 난 당신이 뭔가를 사용할 수있을 때 형의이 종류를 사용하는 이득이 무엇인지 표시되지 않습니다 :
trait Container[A] extends Ordered[A]
class MyContainer extends Container[MyContainer] {
def compare(other: MyContainer) = 0
}
모든 설명은 매우 환영
감사
해결법
-
==============================
1.그것은 다음과 같은 형태 때의 장점은 올 것입니다 :
그것은 다음과 같은 형태 때의 장점은 올 것입니다 :
trait Container[A <: Container[A]] extends Ordered[A] { def clone: A def pair: (A, A) = (clone, clone) } class MyContainer extends Container[MyContainer] { def clone = new MyContainer }
지금 당신은 무료로 쌍을 얻고, 올바른 반환 유형을 얻을. 이 같은없이 수동으로 모든 단일 메소드를 오버라이드 (override) 할 필요가 반환 곧이 아닌 재정의 된 메서드 호출로 같은 유형의 동일한 유형 (무의미 보일러 많이), 또는 잃게 특이성.
-
==============================
2.스칼라에서는 바인딩 유형에 의해 제약 당신의 유형 매개 변수를 만들 수 있습니다. 여기에 귀하의 첫 번째 방법으로는 상위 컨테이너의 하위 클래스와 바인딩 만들기 매개 변수 당신의 유형을하고 있습니다.
스칼라에서는 바인딩 유형에 의해 제약 당신의 유형 매개 변수를 만들 수 있습니다. 여기에 귀하의 첫 번째 방법으로는 상위 컨테이너의 하위 클래스와 바인딩 만들기 매개 변수 당신의 유형을하고 있습니다.
당신의 첫번째 방법을 사용하여 당신은 당신의 컨테이너 클래스의 하위 클래스없는 컨테이너 클래스의 매개 변수를 전달할 수 없습니다.
당신의 제 2의 예에서 당신은 어떤 클래스의 형식 인스턴스 매개 변수를 전달할 수 있습니다. 1 예를 들어 당신이 컨테이너 클래스의 유형의 하위 유형을 제한하는 동안 그래서 여기 아무 제한되지 않습니다.
from https://stackoverflow.com/questions/29339548/scala-f-bounded-types-explanation by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스파크에서 RDD에서 이웃 요소에서 작동 (0) | 2019.11.13 |
---|---|
[SCALA] 병합은 전체 스테이지의 평행도를 감소 (스파크) (0) | 2019.11.13 |
[SCALA] tar.gz의 압축 여러 파일에 읽기가 불꽃에 보관 [중복] (0) | 2019.11.13 |
[SCALA] 스칼라 : 왜 Seq.contains는이 모든 인수 대신 시퀀스 유형의 인수를 걸립니까? (0) | 2019.11.13 |
[SCALA] 스칼라의 지능과 정수의 차이점은 무엇입니까? (0) | 2019.11.13 |