Scala Language
유형 매개 변수화 (일반)
수색…
옵션 유형
매개 변수화 된 유형의 좋은 예는 Option 유형 입니다. 그것은 본질적으로 다음과 같은 정의입니다 (유형에 정의 된 몇 가지 메소드가 더 있음).
sealed abstract class Option[+A] {
def isEmpty: Boolean
def get: A
final def fold[B](ifEmpty: => B)(f: A => B): B =
if (isEmpty) ifEmpty else f(this.get)
// lots of methods...
}
case class Some[A](value: A) extends Option[A] {
def isEmpty = false
def get = value
}
case object None extends Option[Nothing] {
def isEmpty = true
def get = throw new NoSuchElementException("None.get")
}
우리는 이것이 B
타입을 반환하는 매개 변수화 된 메소드 fold
가지고 있음을 볼 수 있습니다.
매개 변수화 된 메서드
메소드의 리턴 유형은 매개 변수의 유형 에 따라 달라질 수 있습니다. 이 예에서 x
는 매개 변수이고 A
는 x
유형 이며 type 매개 변수 로 알려져 있습니다.
def f[A](x: A): A = x
f(1) // 1
f("two") // "two"
f[Float](3) // 3.0F
Scala는 형식 유추 를 사용하여 매개 변수에서 호출 할 수있는 메서드를 제한하는 반환 형식을 결정합니다. 따라서주의해야합니다 : *
모든 유형 A
대해 *
가 정의되지 않았기 때문에 다음은 컴파일 타임 오류입니다.
def g[A](x: A): A = 2 * x // Won't compile
일반 컬렉션
Ints 목록 정의
trait IntList { ... }
class Cons(val head: Int, val tail: IntList) extends IntList { ... }
class Nil extends IntList { ... }
하지만 부울, 이중 등의 목록을 정의해야한다면 어떻게 될까요?
일반 목록 정의
trait List[T] {
def isEmpty: Boolean
def head: T
def tail: List[T]
}
class Cons[T](val head: [T], val tail: List[T]) extends List[T] {
def isEmpty: Boolean = false
}
class Nil[T] extends List[T] {
def isEmpty: Boolean = true
def head: Nothing = throw NoSuchElementException("Nil.head")
def tail: Nothing = throw NoSuchElementException("Nil.tail")
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow