Scala如何定义一种返回值?
def sqrt = (x: Int) =>
if (x > 0 && x < 4)
x * x
我的代码的返回类型是Int => AnyVal
。但如果我把它改成
def method = (x: String) =>
if (x.equals("abc"))
x.concat(x)
返回类型为String => Any
。但为什么不AnyRef
? String是一个对象,因此最好使用AnyRef
。我错了吗?
答案 0 :(得分:12)
由于您的if
表达式没有其他内容,因此如果条件的计算结果为false,则返回Unit
。 Unit
AnyVal
扩展Int
,因此在第一种情况下,最具体的类型是AnyVal
。由于String
扩展了AnyRef
,因此在第二种情况下,最具体的类型为Any
。