리스트 [지능] =>
내가 사용 ScalaCheck 버전 : 불특정 값 파라미터 P, S1, A1 ...
브로 propReversed = {Prop.forAll 목록 당신은 진정한면이 Boolean
이고 허위면이 Prop
인 if
표현을 가지고 있습니다. 컴파일러는 Prop
을 예상하는 경우 부울 값에 propBoolean
암시 적 변환을 적용하지만이 조건은 하나의 해당 장소가 아닙니다. 대신 컴파일러에서 최소 상한값 인 Boolean
및 Prop
을 가져 와서 리턴 유형. (어쩌면 조금 더 놀랍게도, 이것은 Prop
처음과 Boolean
초을 오는 경우에도 마찬가지입니다.)
이이 작품을 만들 수있는 방법은 여러 가지가 있지만, 가장 단순한는 명시 적 변환을 적용하는 것입니다 :
을
val propReversed = Prop.forAll { list: List[Int] =>
val reversed = list.reverse
if (list.isEmpty) Prop.propBoolean(list == reversed) else {
val hasSameSize = reversed.size == list.size
val hasAllElements = list.forall(reversed.contains)
hasSameSize :| " a label which doesn't let the code compile" &&
hasAllElements && elementsAreReversed(list, reversed)
}
}
내 생각에 이것은 환상적인 암시 적 변환 지원 DSL의 좌절감의 또 다른 예일뿐입니다. 나는 ScalaCheck를 좋아하고 매일 사용하지만, 스칼라 (엄청나게 복잡한) 구문의 다른 구석과 상호 작용하기 시작하면 트릭이 무너질 때 약간 더 간결한 사용법을 지원하기 위해 백 플립 핑을하는 것에 대한 가치를 실제로 볼 수 없다. .