[SCALA] 은`#`연산자는 스칼라에서 무엇을 의미합니까?
SCALA은`#`연산자는 스칼라에서 무엇을 의미합니까?
스칼라 입력 레벨 프로그래밍 :이 블로그에서이 코드를 참조하십시오
// define the abstract types and bounds
trait Recurse {
type Next <: Recurse
// this is the recursive function definition
type X[R <: Recurse] <: Int
}
// implementation
trait RecurseA extends Recurse {
type Next = RecurseA
// this is the implementation
type X[R <: Recurse] = R#X[R#Next]
}
object Recurse {
// infinite loop
type C = RecurseA#X[RecurseA]
}
내가 본 적이 코드 R 번호의 X [R # 다음]의 운영자 #이있다. 그것은, (검색 엔진에 의해 무시)를 검색하기는 어렵습니다 때문에 누가 무슨 뜻 말해 줄 수?
해결법
-
==============================
1.그것을 설명하기 위해, 우리는 먼저 스칼라에서 중첩 된 클래스를 설명해야한다. 이 간단한 예제를 생각해 봅시다 :
그것을 설명하기 위해, 우리는 먼저 스칼라에서 중첩 된 클래스를 설명해야한다. 이 간단한 예제를 생각해 봅시다 :
class A { class B def f(b: B) = println("Got my B!") }
이제 그것으로 뭔가를 해보자 :
scala> val a1 = new A a1: A = A@2fa8ecf4 scala> val a2 = new A a2: A = A@4bed4c8 scala> a2.f(new a1.B) <console>:11: error: type mismatch; found : a1.B required: a2.B a2.f(new a1.B) ^
당신은 스칼라에서 다른 클래스의 내부 클래스를 선언 할 때 해당 클래스의 각 인스턴스는 서브 클래스를 가지고 있음을 말하고있다. 즉, 더 A.B 클래스가 없지만 a1.B 및 a2.B 클래스가 있습니다, 및 오류 메시지가 위의 우리에게 말하고있는 것처럼 그들은 서로 다른 클래스입니다.
당신이 이해하지 않은 경우, 경로 의존적 유형을 찾아보십시오.
특정 인스턴스에 제한없이 이러한 중첩 된 클래스를 참조하는 지금, #이 가능하게한다. 즉, 더 A.B 없다, 그러나 A의 인스턴스의 B 중첩 된 클래스를 의미 A # B는있다
우리는 위의 코드를 변경하여 작업에서 볼 수 있습니다 :
class A { class B def f(b: B) = println("Got my B!") def g(b: A#B) = println("Got a B.") }
그리고 그것을 밖으로 시도 :
scala> val a1 = new A a1: A = A@1497b7b1 scala> val a2 = new A a2: A = A@2607c28c scala> a2.f(new a1.B) <console>:11: error: type mismatch; found : a1.B required: a2.B a2.f(new a1.B) ^ scala> a2.g(new a1.B) Got a B.
-
==============================
2.이 유형의 투사로 알려진 및 유형의 멤버에 액세스하는 데 사용됩니다.
이 유형의 투사로 알려진 및 유형의 멤버에 액세스하는 데 사용됩니다.
scala> trait R { | type A = Int | } defined trait R scala> val x = null.asInstanceOf[R#A] x: Int = 0
-
==============================
3.기본적으로, 다른 클래스 내에서 클래스를 참조하는 방법입니다.
기본적으로, 다른 클래스 내에서 클래스를 참조하는 방법입니다.
http://jim-mcbeath.blogspot.com/2008/09/scala-syntax-primer.html ( "파운드"를 검색)
-
==============================
4.여기에) "기호 연산자"를 검색하기위한 자원 (이 정말 방법이 있습니다), 그러나 나는 "#"을 탈출 scaleX가에에 검색하는 방법을 알아 내지 못했다
여기에) "기호 연산자"를 검색하기위한 자원 (이 정말 방법이 있습니다), 그러나 나는 "#"을 탈출 scaleX가에에 검색하는 방법을 알아 내지 못했다
http://www.artima.com/pins1ed/book-index.html#indexanchor
from https://stackoverflow.com/questions/9443004/what-does-the-operator-mean-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 정의하고 스파크 SQL에서 사용자 정의 집계 함수를 사용하는 방법? (0) | 2019.10.30 |
---|---|
[SCALA] 어떻게하게 IntelliJ IDEA와 함께 SBT를 사용하여 동네 짱의 JAR (지방 JAR)을 구축? (0) | 2019.10.30 |
[SCALA] 스칼라의 VAR와 val 정의의 차이점은 무엇입니까? (0) | 2019.10.29 |
[SCALA] 중첩 된 구조를 업데이트 할 클리너 방법 (0) | 2019.10.29 |
[SCALA] (왜) 우리는 캐시를 호출하거나 RDD에 유지해야합니까 (0) | 2019.10.29 |