请稍等 ...
×

采纳答案成功!

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

关于for each

同一个lambda表示式(Int)->Int 为什么一个行一个不行呢

正在回答

1回答

因为下面的lambda是直接传给foreach的,类型推导的时候直接按照foreach的参数类型推导,结果是(Int)->Unit类型

0 回复 有任何疑惑可以回复我~
  • 提问者 枉费心机 #1
    lambda  最后一行不是表示式的  返回值么  应该是Int 啊
    回复 有任何疑惑可以回复我~ 2019-12-10 10:39:00
  • bennyhuo 回复 提问者 枉费心机 #2
    lambda表达式的类型推导有个顺序,实际上lambda最后一行不管表达式的值的类型是什么,我们都可以把他的返回类型声明为Unit,当然你不声明的话就像你说的是返回表达式的类型也就是Int了。这里foreach的参数类型是确定的,等于为参数的lambda表达式声明了类型必须为int->unit。
    回复 有任何疑惑可以回复我~ 2019-12-10 10:45:12
  • 提问者 枉费心机 回复 bennyhuo #3
    val func = { ele: Int ->
            ele + 1
        }
    这个func 相当于已经声明了是 Int-> Int  所以不能再传入foreach中,
    
    { ele: Int ->
            ele + 1
        }
    没有变量接收,所以可以被foreach声明为int ->Unit
    回复 有任何疑惑可以回复我~ 2019-12-10 10:57:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信