请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

函数的返回值类型省略问题


// 每一个分支的最后一个表达式的值就是when表达式在这种条件下的结果.
fun hasPrefix(x: Any) = when (x) {
    is String -> x.startsWith("prefix")
    else -> false
}

上面的函数为什么不需要添加返回值类型: Boolean ?
上面的代码,从语法该如何分析?
when表达式返回了一个Boolean结果,把这个结果赋值给了hasPrefix函数,总感觉有些别扭

正在回答

1回答

你可以这么理解,函数调用其实也是一个表达式,他的值就等于后面的表达式的值,类型自然就是后面的表达式的值的类型。

后面的表达式的类型编译期是确定的,是Boolean,那么你不明确写,编译器就会帮你推导出来函数的返回值类型。

这个写法实际上很形象的强化了表达式的概念。

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_夜_71 #1
    上面回答的是编译器的智能推导,那表达式赋值给一个函数,这个该怎么理解?
    回复 有任何疑惑可以回复我~ 2019-09-08 12:57:12
  • bennyhuo 回复 提问者 qq_夜_71 #2
    这个是函数的定义方式,不能叫赋值。如果函数体内只有一个表达式,它的值就是函数返回值的话,就可以采用这种写法。
    
    你可以认为是函数的简化形式,如果你觉得困惑,就不要把他理解成赋值,记住函数可以这么写就行了。
    回复 有任何疑惑可以回复我~ 2019-09-08 13:14:33
  • 提问者 qq_夜_71 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-09-08 13:18:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信