복붙노트

[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. ==============================

    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.스칼라에서는 바인딩 유형에 의해 제약 당신의 유형 매개 변수를 만들 수 있습니다. 여기에 귀하의 첫 번째 방법으로는 상위 컨테이너의 하위 클래스와 바인딩 만들기 매개 변수 당신의 유형을하고 있습니다.

    스칼라에서는 바인딩 유형에 의해 제약 당신의 유형 매개 변수를 만들 수 있습니다. 여기에 귀하의 첫 번째 방법으로는 상위 컨테이너의 하위 클래스와 바인딩 만들기 매개 변수 당신의 유형을하고 있습니다.

    당신의 첫번째 방법을 사용하여 당신은 당신의 컨테이너 클래스의 하위 클래스없는 컨테이너 클래스의 매개 변수를 전달할 수 없습니다.

    당신의 제 2의 예에서 당신은 어떤 클래스의 형식 인스턴스 매개 변수를 전달할 수 있습니다. 1 예를 들어 당신이 컨테이너 클래스의 유형의 하위 유형을 제한하는 동안 그래서 여기 아무 제한되지 않습니다.

  3. from https://stackoverflow.com/questions/29339548/scala-f-bounded-types-explanation by cc-by-sa and MIT license