9
은, 그것은 단지의 경우 - 다른 표현의 다른 부분에서 작동 :왜 다른 곳에서 일하는 것을 보장하지 않습니까? 나는 <strong>보장</strong> PREDEF를 사용할 때 스칼라
def evenIt(x:Int) = {
if(x % 2 == 0)
x+1 //return odd on purpose!
else{
x + 1
} ensuring(_ % 2 == 0)
}
//Test it:
evenIt(3)
> 4
evenIt(4)
> 5 //<--- ensuring does not catch this!
하지만 "경우 - 다른"는 표현이었다고 생각 스칼라. 그래서 그냥 값을 반환해야합니다 - 보장 차례로 전달되어야합니까?
여기 뭔가 혼란 스럽습니까? 감사.
편집 : 다음과 같이 저자는 그것을 사용 스칼라의 책 프로그래밍 :
private def widen(x: Int) : Element =
if(w <= width)
this
else {
val left = elem(' ', (w - width)/2, height)
var right = elem(' ', w - width - left.width, height)
left beside this beside right
} ensuring (w <= _.width
그가 여기 만 다른 부분에 적용됩니까?
감사합니다! 나는 그것에 대해 생각하지 않았다. 저자가이 기능을 사용하는 코드를 추가했습니다. 그는 그것을 다른 곳의 부분에 적용합니까? – drozzy
나는 똑같은 문제를 우연히 만났습니다.) 나는 그렇다고 생각합니다. 다른 책에 적용된 책에서, 다른 부분에 대해서만 확대를하게 만듭니다. 하지만 코드의 다른 부분에 다른 보장을 할 수 있습니다. – damluar