복붙노트

[SCALA] 스칼라 : 왜 Seq.contains는이 모든 인수 대신 시퀀스 유형의 인수를 걸립니까?

SCALA

스칼라 : 왜 Seq.contains는이 모든 인수 대신 시퀀스 유형의 인수를 걸립니까?

그래서 예를 들어 왜 목록 (1,2,3,4) .contains는 ( "태권도 연맹")도 컴파일 무엇입니까? 컴파일러는이를 거부하면 좋지 않을까요?

해결법

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

    1.여기에 흥미로운 답변이 많이 있지만, 내 자신의 이론 : Any를받지 못한 포함되어있는 경우, 다음 서열 공동 변형 할 수 없습니다.

    여기에 흥미로운 답변이 많이 있지만, 내 자신의 이론 : Any를받지 못한 포함되어있는 경우, 다음 서열 공동 변형 할 수 없습니다.

    예를 들어, 참조, 공동 변형하지 않고 누구의 설정은, Any를 대신하는 A을 포함하고 있습니다.

    그 이유는 독자에게 연습으로 남아 있습니다. ;-)하지만 여기에 힌트 :

    scala> class Container[+A](elements: A*) {                         
         |   def contains(what: A): Boolean = elements exists (what ==)
         | }
    <console>:7: error: covariant type A occurs in contravariant position in type A of value what
             def contains(what: A): Boolean = elements exists (what ==)
                          ^
    
  2. ==============================

    2."포함"(그 전에 자바 등) 스칼라 평등 테스트 및 평등에 대한 근본적 형식화되지 않은 것입니다. 지정되지 않은-평등을 갖는 실제적인 값은 작고, 0은 아님. 있다, 예를 들어, 그것은 다른 클래스의 두 개체에 대한 의미가 몇 차례 서로 같아야합니다. 예를 들어, 당신은 그들이 같은 색상 또는 불변 HashSet의 그들은 같은 요소를 포함하는 경우와 동일하게 불변 TreeSet의를 정의 할 경우 PantoneColor 동일하게 형 RGBColor의 객체를 할 수 있습니다. 즉이 지정되지 않은 평등은 또한 두통의 무리, 그리고 컴파일러가 쉽게 목록 (1,2,3,4) .contains ( "태권도 연맹") 무의미하지만 잡을 수 있다는 사실을 일으키는 말했다하지 않습니다 그들 중 하나입니다 .

    "포함"(그 전에 자바 등) 스칼라 평등 테스트 및 평등에 대한 근본적 형식화되지 않은 것입니다. 지정되지 않은-평등을 갖는 실제적인 값은 작고, 0은 아님. 있다, 예를 들어, 그것은 다른 클래스의 두 개체에 대한 의미가 몇 차례 서로 같아야합니다. 예를 들어, 당신은 그들이 같은 색상 또는 불변 HashSet의 그들은 같은 요소를 포함하는 경우와 동일하게 불변 TreeSet의를 정의 할 경우 PantoneColor 동일하게 형 RGBColor의 객체를 할 수 있습니다. 즉이 지정되지 않은 평등은 또한 두통의 무리, 그리고 컴파일러가 쉽게 목록 (1,2,3,4) .contains ( "태권도 연맹") 무의미하지만 잡을 수 있다는 사실을 일으키는 말했다하지 않습니다 그들 중 하나입니다 .

    대부분의 자바 버그 찾는 도구는 황당한 유형이 지정되지 않은 평등 사용의 존재를 감지하는 테스트를 포함한다. (나는하게 IntelliJ IDEA에서이 작업을 수행 할 수있는 검사를 썼다.) 내가 스칼라 버그 찾는 도구가 온라인 상태가되면, 이들은 처음 감지 버그 사이에있을 것입니다 의심의 여지가있다.

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

    3.값 (== 사용) 값과 동일한 시퀀스의 요소를 확인하여 존재하는지 여부를 확인 SeqLike.contains. ==이 이유 있다는 어떤 그래서 나는 의심한다.

    값 (== 사용) 값과 동일한 시퀀스의 요소를 확인하여 존재하는지 여부를 확인 SeqLike.contains. ==이 이유 있다는 어떤 그래서 나는 의심한다.

  4. from https://stackoverflow.com/questions/3678998/scala-why-does-seq-contains-take-an-any-argument-instead-of-an-argument-of-the by cc-by-sa and MIT license