아래 코드는 실제 목록을 만들려면 목록 유형과 빈 목록과 단점을 나타내는 경우 클래스 하나 두 구현을 정의스칼라 : 사례 클래스 인스턴스를 만들려면 컴패니언의 "적용"메소드가 필요합니까?
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]
object List {
...
def apply[A](as: A*): List[A] = {
if (as.isEmpty) Nil
else Cons(as.head, apply(as.tail: _*))
}
val example = Cons(1, Cons(2, Cons(3, Nil)))
}
목록이 순환하여 만든 나의 가정 정확한지는 때 val example = ...
를 위의 방법을 적용 실행됩니다.
는 이렇게됩니다. 단점을 만들기위한 서명 스칼라가 실제로
class Foo(s: String, i: Int)
스칼라에서, 그것은 클래스를 생성 말할 때 List(1, 2, 3, Nil)
대해'발 예 2 = 목록 (1,2,3)', 내가 만드는 데 함께 머리와 꼬리를 넣어 말 생성자가 없기 때문에 실제로 나는 단점 인스턴스가 생성되는 방법을 이해하기 위해 노력하고있어 단점 [Int], 스칼라는 어떻게 이것을 성취합니까? –
나는 그 질문을 이해할 수 있을지 확신하지 못한다. 'Const'는 사례 클래스이므로, A와 List [A]를 취하는 생성자를 가지고 있습니다. 당신은 명시 적으로'apply' 메쏘드의 else 브랜치에서 그것을 호출합니다. –
당신이 나의 초심자를 용서 할 수 있다면 나는 설명하려고 노력할 것이다. Cons가 언급했듯이, Cons에는 아무 것도 없기 때문에 빈 생성자가 있습니다. Apply는 인스턴스를 생성하기 위해 Cons를 재귀 적으로 호출합니다. 그러나 apply와 cons 생성자의 매개 변수는 다릅니다. –