복붙노트

[SCALA] <: 스칼라 <연산자

SCALA

<: 스칼라 <연산자

스칼라에서 <연산자 : 사람이 <에 대한 몇 가지 세부 사항을 제공 할 수 있습니다. 내 생각 :

if(apple <:< fruit)  //checks if apple is a subclass of fruit.

다른 설명이 있습니까? 나는 스칼라 소스 파일의 많은 정의를 참조하십시오.

해결법

  1. ==============================

    1.<<오퍼레이터되지 - 그것은 식별자이므로 중 하나이다 :

    <<오퍼레이터되지 - 그것은 식별자이므로 중 하나이다 :

    이 경우, <: ​​

    매니페스트에있어서, 그것은이 매니페스트로 나타내는 형식에서는 매니페스트 인자가 나타내는 그것의 서브 타입이다 여부를 체크한다.

    PREDEF의 유형에 대해이 비교적 새로운과 동일한 선언의 삼인조의 일부가 될 것 때문에 나는 또한 약간에 대해 혼란 스러워요!

    class <%<[-From, +To] extends (From) ⇒ To
    class <:<[-From, +To] extends (From) ⇒ To
    class =:=[From, To] extends (From) ⇒ To
    
  2. ==============================

    2.의 <<타입 = 관련 종류와 함께 Predef.scala에 정의 = 및 <% <다음과 같다 :

    의 <<타입 = 관련 종류와 함께 Predef.scala에 정의 = 및 <% <다음과 같다 :

    // used, for example, in the encoding of generalized constraints
    // we need a new type constructor `<:<` and evidence `conforms`, as 
    // reusing `Function2` and `identity` leads to ambiguities (any2stringadd is inferred)
    // to constrain any abstract type T that's in scope in a method's argument list (not just the method's own type parameters)
    // simply add an implicit argument of type `T <:< U`, where U is the required upper bound (for lower-bounds, use: `U <: T`)
    // in part contributed by Jason Zaugg
    sealed abstract class <:<[-From, +To] extends (From => To)
    implicit def conforms[A]: A <:< A = new (A <:< A) {def apply(x: A) = x} // not in the <:< companion object because it is also intended to subsume identity (which is no longer implicit)
    

    이것은 일반적인 유형 OP [T1, T2]가 T1 연산 T2 기록 할 수있는 스칼라 기능을 사용한다. aioobe 의해 바와 같이 이는 단지 일반적인 형태의 일부의 경우에 적용되는 방법에 대한 기록 파라미터를 제공하기 위해 사용될 수있다 (주어진 예 Tuple2의 횡단 (traverse)에서만 사용될 수 toMap 방법이다). 주석에서 언급 한 바와 같이, 이것은 어떤 범위 내 추상 형식 / 형식 매개 변수를 참조 할 수 있도록 일반 제네릭 형식 제약 조건을 일반화. 이 (암시 EV를 : T1 < T2)과 같은 증거 매개하여 후자의 범위 내 암시 값 변환에 사용되는 의도로 이어질 수 있다는 점에서이.

    나는 확실히 나는 스칼라 메일 링리스트에 대한 몇 가지 논의를 만났다고 해요,하지만 순간에 그것을 찾을 수 없습니다.

  3. ==============================

    3.나는 주위에 물어, 이것은 내가 가진 설명입니다 :

    나는 주위에 물어, 이것은 내가 가진 설명입니다 :

    <<일반적으로 증거 매개 변수로 사용됩니다. TraversableOnce 예를 들어, toMap 같이 선언 DEF toMap [T, U (암시 EV하십시오 <<(T, U)) immutable.Map [T, U]. 이은에 이동 2 - 튜플 포함 된 경우 toMap 방법에만 작동하는 제약 조건을 표현한다. 패턴 화는 또 다른 예이다. <<당신은 단지 traversables의에 이동을 평평하게 할 수 있다는 제약 조건을 표현하는 데 사용됩니다.

  4. ==============================

    4.사실, 그것은 명백한 사과가 나타내는 클래스는 클래스의 서브 클래스는 매니페스트 과일로 표현입니다 확인합니다.

    사실, 그것은 명백한 사과가 나타내는 클래스는 클래스의 서브 클래스는 매니페스트 과일로 표현입니다 확인합니다.

    예를 들어 :

    manifest[java.util.List[String]] <:< manifest[java.util.ArrayList[String]] == false
    manifest[java.util.ArrayList[String]] <:< manifest[java.util.List[String]] == true
    
  5. ==============================

    5.scala.Predef.scala에서 복사 :

    scala.Predef.scala에서 복사 :

    // Type Constraints --------------------------------------------------------------
    
      // used, for example, in the encoding of generalized constraints
      // we need a new type constructor `<:<` and evidence `conforms`, as 
      // reusing `Function2` and `identity` leads to ambiguities (any2stringadd is inferred)
      // to constrain any abstract type T that's in scope in a method's argument list (not just the method's own type parameters)
      // simply add an implicit argument of type `T <:< U`, where U is the required upper bound (for lower-bounds, use: `U <: T`)
      // in part contributed by Jason Zaugg
      sealed abstract class <:<[-From, +To] extends (From => To)
      implicit def conforms[A]: A <:< A = new (A <:< A) {def apply(x: A) = x}
    
  6. ==============================

    6.더 나은 구현을 이해합니다.

    더 나은 구현을 이해합니다.

    sealed abstract class <:<[-From, +To] extends (From => To)
    implicit def conforms[A]: A <:< A = new (A <:< A) {def apply(x: A) = x}
    

    나는 간단한 구현을 고안했습니다. 다음은 작동하지 않았다.

    sealed class <:<[-From <: To, +To]
    implicit def conforms[A <: B, B]: A <:< B = new (A <:< B)
    

    적어도이 유효한 모든 사용 사례에서 확인을 입력하지 않기 때문.

    case class L[+A]( elem: A )
    {
       def contains[B](x: B)(implicit ev: A <:< B) = elem == x
    }
    
    error: type arguments [A,B] do not conform to class <:<'s
           type parameter bounds [-From <: To,+To]
    def contains[B](x: B)(implicit ev: A <:< B) = elem == x
                                         ^
    
  7. ==============================

    7.흠 ... 내가 찾을 수 없습니다 "<<"어느 곳도 있지만, "<"의미가 하위 유형. http://jim-mcbeath.blogspot.com/2008/09/scala-syntax-primer.html#types에서 :

    흠 ... 내가 찾을 수 없습니다 "<<"어느 곳도 있지만, "<"의미가 하위 유형. http://jim-mcbeath.blogspot.com/2008/09/scala-syntax-primer.html#types에서 :

    List[T] forSome { type T <: Component }
    
  8. from https://stackoverflow.com/questions/2603003/operator-in-scala by cc-by-sa and MIT license