一覧[INT] =>
私が使用しているScalaCheckバージョン:未指定値パラメータ P、S1、A1 ...
ヴァルpropReversed = Prop.forAll {リスト真の辺のタイプがBoolean
、偽の辺のタイプがProp
のif
という表現があります。コンパイラは、Prop
が必要な場合はブール値に暗黙の変換を適用しますが、このような条件はこれらの場所の1つではありません。代わりにコンパイラはBoolean
とProp
という最小の上限を取り、戻り値の型。 (たぶんもう少し意外にも、これはProp
は、第1および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が好きで、毎日使っていますが、Scalaの(非常に複雑な)構文の他の部分とのやりとりが始まると、トリックが崩壊するときに、少し簡潔な使い方をサポートするためにバックフリップを行う価値はありません。