Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- akka 강좌
- 하이퍼레저 패브릭
- Actor
- 스위프트
- Adapter 패턴
- Play2 로 웹 개발
- 블록체인
- Golang
- 주키퍼
- 안드로이드 웹뷰
- 스칼라 동시성
- 파이썬 동시성
- 엔터프라이즈 블록체인
- play2 강좌
- 하이브리드앱
- 스칼라
- Play2
- 파이썬 머신러닝
- 이더리움
- 플레이프레임워크
- Hyperledger fabric gossip protocol
- Akka
- 파이썬 강좌
- 스칼라 강좌
- 파이썬
- CORDA
- play 강좌
- 파이썬 데이터분석
- 그라파나
- hyperledger fabric
Archives
- Today
- Total
HAMA 블로그
스칼라 강좌 (30) - type projection ( # 에 관하여) 본문
Type projection
개요:
타입 안의 (nested) 타입 멤버를 레퍼런싱 하기 위한 문법이다.
T#x 라고 지칭하며, 타입 T 안의 x 라는 이름의 타입 멤버를 나타낸다.
예제:
아래에 보면 클래스 내부에 또 하나의 클래스 (nested class) 가 있는 것을 볼 수 있다.
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 로 정의하는데, 보는 바와 같이 a1 과 a2 각각 가지고있는 class B 는 동일하지 않다.
여기서 # 의 쓰임새가 나오는데 # 은 다른 nested 클래스에 대한 참조를 할 수 있도록 만들어준다.
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.
잘된다.
참고)
http://stackoverflow.com/questions/9443004/what-does-the-operator-mean-in-scala
'Scala' 카테고리의 다른 글
스칼라 강좌 (32) -타입기초/ 타입별칭 /추상 타입/ 타입 경계 / 변성 (0) | 2016.12.07 |
---|---|
스칼라 강좌 (31) - 스칼라에서 사용되는 심볼들 (0) | 2016.12.07 |
스칼라 강좌 (29) - for comprehensions (0) | 2016.11.12 |
스칼라 강좌 (28) - Currying(커링) (0) | 2016.11.08 |
스칼라 강좌 (27) - 모나드 (Monad) (0) | 2016.11.08 |
Comments