Делаю Ractive Scala на курсере =)
(Далее будет property..forAll, доставшееся от scalacheck, и несколько функций, смысл которых совершенно неважен, т.к. вопрос чисто про синтаксис)
Есть кот, который превращает шота(H) в списки:
implicit def hToList(heap: H): List[Int] = if (isEmpty(heap)) Nil else findMin(heap) :: hToList(deleteMin(heap))
теперь, беру исходный кот:
property("test7_meld_sort") = forAll { (heapPair: (H, H)) =>
(hToList(heapPair._1) ++ hToList(heapPair._2)).sorted == hToList(meld(heapPair._1, heapPair._2))
}
и пользуясь вышеприведенным имплицитным мэджиком просто выбрасываю все вызовы hToList:
property("test7_meld_sort") = forAll { (heapPair: (H, H)) =>
(heapPair._1 ++ heapPair._2).sorted == meld(heapPair._1, heapPair._2)
}
Вот это красивое, годное котэ!
Но это оно не конпелируется, конпелятор кричит что нешжможло тип в правой части операции ==
Поможем ему руками:
property("test7_meld_sort") = forAll { (heapPair: (H, H)) =>
val mldList: List[Int] = meld(heapPair._1, heapPair._2)
(heapPair._1 ++ heapPair._2).sorted == mldList
}
Вот теперь шможло!
Но это выглядит невперенно уродливо.
Вопрос, можно ли сделать как-то вот так?
property("test7_meld_sort") = forAll { (heapPair: (H, H)) =>
(heapPair._1 ++ heapPair._2).sorted == (List[Int]) meld(heapPair._1, heapPair._2)
}
т.е. прямо в линию зафигачить явный каст, не рассирая его на две строчки? И чтобы оно при этом шможло в implicit
Спасибо :)