[SCALA] 스칼라의 '::'연산자, 어떻게 작동합니까?
SCALA스칼라의 '::'연산자, 어떻게 작동합니까?
스칼라에서, 나는 caseclass, 사례 클래스 푸 (X : int)를 만들 수 있습니다, 다음과 같이 목록에 넣어 :
List(Foo(42))
자, 여기에 이상한 아무것도. 다음은 나에게 이상하다. 운영자는 :: 오른쪽 목록에서 함수? 스칼라에서 하나 개의 인수 어떤 기능으로, 나는 중위 표기법을 호출 할 수 있습니다. 예 1 + 2는 지능 객체의 기능 (+)이다. 클래스 푸 난 그냥 어떻게 가능한 다음되면, :: 연산자가없는 정의?
Foo(40) :: List(Foo(2))
스칼라 2.8 RC1, 나는 대화 형 프롬프트에서 다음과 같은 출력을 얻을 :
scala> case class Foo(x:Int)
defined class Foo
scala> Foo(40) :: List(Foo(2))
res2: List[Foo] = List(Foo(40), Foo(2))
나는에 가서 그것을 사용하지만, 설명은 무엇인가 할 수 있습니까?
해결법
-
==============================
1.스펙에서 :
스펙에서 :
당신은 항상 컴파일러의 '타이 퍼'상을 완료 한 후 프로그램을 인쇄하여이 규칙은 스칼라에 적용되는 방식을 볼 수 있습니다 :
scala -Xprint:typer -e "1 :: Nil" val r: List[Int] = { <synthetic> val x$1: Int = 1; immutable.this.Nil.::[Int](x$1) };
-
==============================
2.그것은으로 끝난다. 그리고 그 기호는이 기능이 (여기 List 클래스에서) 오른쪽에있는 클래스에 정의되어있다.
그것은으로 끝난다. 그리고 그 기호는이 기능이 (여기 List 클래스에서) 오른쪽에있는 클래스에 정의되어있다.
그래서, 그것의 목록 (푸 (2)) : :( 푸 (40)),하지 푸 (40) : :( 목록 (푸 (2) 예)).
-
==============================
3.주어진 답변에서 누락 한 측면은 패턴 매칭 표현에 그 :: 지원하는 것입니다 :
주어진 답변에서 누락 한 측면은 패턴 매칭 표현에 그 :: 지원하는 것입니다 :
List(1,2) match { case x :: xs => println(x + " " + xs) case _ => println("") }
클래스는 :: 정의된다 :
final case class ::[B](private var hd: B, private[scala] var tl: List[B])
그래서 경우 : :( X, XS)는 동일한 결과를 생성한다. 표현의 경우는 X : XS 작품을 기본 추출기가 :: 경우 클래스에 대해 정의하고 사용 중위가 될 수 있기 때문이다.
-
==============================
4.콜론 메소드 이름이 종료 된 경우 (:)이 방법은 여기의 경우 오른쪽 피연산자에 호출됩니다. 메소드 이름은 콜론으로 끝나지 않는 경우, 메소드는 왼쪽 피연산자에 호출됩니다. 예를 들어, B는 +, + (A)에 호출된다.
콜론 메소드 이름이 종료 된 경우 (:)이 방법은 여기의 경우 오른쪽 피연산자에 호출됩니다. 메소드 이름은 콜론으로 끝나지 않는 경우, 메소드는 왼쪽 피연산자에 호출됩니다. 예를 들어, B는 +, + (A)에 호출된다.
그래서, 당신의 예에서 :: 목록입니다 오른쪽 피연산자의 방법이다.
from https://stackoverflow.com/questions/2827293/scalas-operator-how-does-it-work by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 지원 꼬리 재귀 최적화합니까? (0) | 2019.11.06 |
---|---|
[SCALA] 케이스 클래스는 하나 개의 필드가있는 경우 경우 클래스에 JSON을 설정하는 방법 (0) | 2019.11.06 |
[SCALA] 동적 특성에 혼합 (0) | 2019.11.06 |
[SCALA] 어떻게 자기 형을 구현하는 등 스칼라의이 입력, 추상적 인 유형을 사용 하는가? (0) | 2019.11.06 |
[SCALA] 어떻게 추가 "제공"종속성 / 테스트 작업 '클래스 경로를 실행하는 백업? (0) | 2019.11.06 |