2
scalacheck로 테스트하고 싶은 개체 목록을 포함하는 불변의 데이터 구조가있는 scala가 있습니다.scalacheck에 foldLeft 또는 foreach가없는 이유 Gen
이 개체의 삽입은 새 개체를 반환합니다. 이 데이터 구조에 여러 객체를 삽입하려면 어떻게합니까? 다시 말해, 데이터 구조의 무작위 인스턴스에 대해 생성기를 작성하려면 어떻게해야합니까? A는 객체의 유형입니다
유형이 H 인 경우
는 [A], 나는 같은 일을 시도 :var heap = empty
arbitrary[A] map (x => heap = insert(x, heap))
을하지만이 작동하지 않았다. 의 당신이 WrappedList[String]
의 발전기를 정의 할 수있는 방법을 보자,
final class WrappedList[A] private (underlying: List[A]) {
def insert[B>:A](elem: B): WrappedList[B] = new WrappedList(elem :: underlying)
override def toString: String = "WrappedList(" + underlying.mkString(", ") + ")"
}
object WrappedList {
def empty[A]: WrappedList[A] = new WrappedList(Nil)
}
간단한 예를 들어 :
임의 [A]는 하나의 생성자를 제공합니다. 실제로는 'Int'를 폴드 할 수 없습니다. 당신은 임의의 [List [A]]를 가질 수 있고, 목록에서 fold를 사용하여 heap을 만들거나 heap = insert (임의의 [A], heap) 또는 empty (pseudo code) –