슬라이드에 있는 이 예시 코드가 조금 헷갈린다. 함수 g는 Foo 에 대해서 받겠다고 했는데 왜 g(foo)를 하는지???
/*
결론 : Foo type의 정의 요소만 갖추면 (그 이상 요소를 갖더라도)
Foo type의 연산 등을 모두 이용할 수 있다.
Q. 그럼 여기서 누가 subtype인가?
foo와 sun은 Foo의 subtype이다
Foo의 자식 느낌... Foo에서 파생되었다고 생각하자
*/
/**
* Structure type (Record Type)
*/
val gn = 0
object foo {
val a = 3;def b = a+1
def f(x:Int) = b+x+gn;def f(x:String) = "hello" + x
}
object sun{
val a = 5;
val b = 10
def f(x:Int):Int = 10
val c = 15
}
type Foo = {
val a:Int
def b:Int
def f(x:Int):Int
}
def g(x:Foo) ={
val gn = 10
x.f(3)
}
g(foo)
g(sun)
foo.f(3)
/*
결론 : Foo type의 정의 요소만 갖추면 (그 이상 요소를 갖더라도)
Foo type의 연산 등을 모두 이용할 수 있다.
Q. 그럼 여기서 누가 subtype인가?
foo와 sun은 Foo의 subtype이다
Foo의 자식 느낌... Foo에서 파생되었다고 생각하자
*/
'프로그래밍 > Scala' 카테고리의 다른 글
1103 Mixin, Stacking with Traits (0) | 2022.11.03 |
---|---|
1101 Inheritance vs. Composition (0) | 2022.11.01 |
Currying & Closure 완전 이해하기 (0) | 2022.10.21 |
PART 1 - Currying (0926) (0) | 2022.10.20 |
HW 1. Exercise 1-2 보충 (1) | 2022.10.02 |