В scala, когда я использую , обеспечивающий предопределенный, он работает только на части else выражения if-else:
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!
Но ядумал, что «если-еще» было выражением в скале.Поэтому он должен просто возвращать значение - которое, в свою очередь, должно быть передано , гарантирующему ?
Или я что-то здесь путаю?Спасибо.
РЕДАКТИРОВАТЬ: В книге «Программирование в Scala» автор использует ее следующим образом:
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
Применяет ли он ее только к другой части здесь?