2017-02-25 3 views
3

소품 부울 캐스팅 수 없습니다 : (47, 36) Any => org.scalacheck.Prop에서 사용할 수있는 암시 적 뷰가 없습니다. 브로 propReversed = {Prop.forAll리스트 :리스트 [지능] =>ScalaCheck 나는 다음과 같은 속성이 예를

오류 : 방법 (47, 36) 충분한 인자 FORALL :

(암시 P : 없음 => org.scalacheck.Prop , implicit a1 : org.scalacheck.Arbitrary [List [Int]], 암시 적 s1 : org.scalacheck.Shrink [List [Int]], 암시 적 pp1 : 목록 [Int] => org.scalacheck.util.Pretty) org .scalacheck.Prop. 문제가있다 1.13.4

답변

4

리스트 [지능] =>

내가 사용 ScalaCheck 버전 : 불특정 값 파라미터 P, S1, A1 ...

브로 propReversed = {Prop.forAll 목록 당신은 진정한면이 Boolean이고 허위면이 Propif 표현을 가지고 있습니다. 컴파일러는 Prop을 예상하는 경우 부울 값에 propBoolean 암시 적 변환을 적용하지만이 조건은 하나의 해당 장소가 아닙니다. 대신 컴파일러에서 최소 상한값 인 BooleanProp을 가져 와서 리턴 유형. (어쩌면 조금 더 놀랍게도, 이것은 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를 좋아하고 매일 사용하지만, 스칼라 (엄청나게 복잡한) 구문의 다른 구석과 상호 작용하기 시작하면 트릭이 무너질 때 약간 더 간결한 사용법을 지원하기 위해 백 플립 핑을하는 것에 대한 가치를 실제로 볼 수 없다. .

관련 문제