在scala中,当我使用并确保 predef时,它仅适用于if-else表达式的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!
但是我认为“if-else”是scala中的一种表达。因此,它应该只返回一个值-继而应将其传递给并确保?
还是我在这里感到困惑?谢谢。
编辑:在《 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
他是否仅将其应用于此处的其他部分?
最佳答案
是的,如果if-else是一个表达式,但是将其括在方括号中的方式仅是将ensuring
应用于x+1
,而不是if
-expression。如果将ensuring
放在if
的右大括号后面,它将完成您想要的操作:
def evenIt(x:Int) = {
if(x % 2 == 0)
x + 1 //return odd on purpose!
else
x + 1
} ensuring( _ % 2 == 0)
关于scala - 为什么确保仅在其他方面起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5843791/