Scala Dotty

김카레
김카레
Aug 26 · 3 min read

Scala 3

  • 주요 컨셉 : Dependent Object Types (DOT)
  • DOT 이란 : Core calculus for path-dependent types
  • DOTTY란?
    Scala 3의 프로젝트명이자, DOT을 지원하는 새로운 컴파일러 이름이다.
    (Scala 3 에서는 scalac 대신 dotc를 사용한다)

Path dependent types

그렇다면 path-dependent types란 무엇인가?
아래와 같은 경우, Inner 클래스는 Outer 객체에 dependent한 type이다.

case class Outer() {
case class Inner(num: Int)
var value: Option[Inner] = None
}
val first = Outer()
val second = Outer()
val firstInner = Some(first.Inner(1))
val secondInner = Some(second.Inner(1))
first.value = firstInner
second.value = secondInner

따라서 아래와 같은 경우, 기존에는 에러가 발생하였다.

first.value = secondInner // ERROR!

그래서 뭐가 바뀌나?

이제 아래와 같은 코드가 가능하다.

trait Key { type Value }
trait HMap { self =>
def get(key: Key): Option[key.Value]
def add(key: Key)(value: key.Value) = new HMap {
def get(k: Key) =
// Below code is no longer an error!
if (k == key) Some(value.asInstanceOf[k.Value])
else self.get(k)
}
}
object HMap {
def empty = new HMap { def get(k: Key) = None }
}
class Setting(val str: String) extends Key
val sort = new Setting(“sort”) { type Value = String }
val width = new Setting(“width”) { type Value = Int }
val params = HMap
.empty
.add(width)(120)
.add(sort)(“time”)

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade