프로그래밍/Scala
Structure Type
잠이안와
2022. 10. 21. 15:24
슬라이드에 있는 이 예시 코드가 조금 헷갈린다. 함수 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에서 파생되었다고 생각하자
*/