• 霍霍
    2019-01-09
    你好,我测试在test方法中的return写与不写是没有关系的,crossinline能不会中断外部方法,是因为他可以在检查期就可以检查出lambda中是否有return而提示报错,这样就不会中断外部方法了,而不是防止test方法中的return被编译到外部方法中 ,不知道这样理解对不对

    作者回复: 嗯,也没有错

    
    
  • (-.-)
    2018-11-04
    看生成的代码,crossinline并没有new出来一个Function,noinline倒是new了一个Function。
    而且在内联函数里面做return,不管是crossinline,还是noinline应该都不会改变外层函数的返回值吧?只是在inline函数接受lambda的时候,这个lambda(没有crossinline或者noinline)里面的return会改变外层函数的返回值吧?

    作者回复: crossinline表示将lambda拆解,不允许非局部返回,而noinline表示不内联,lambda依然保留lambda允许直接返回外层函数的特性。

    
    
  • 涛
    2018-10-20
    不知道是不是老师讲错了,还是Kotlin版本问题:
    crossinline 加上后,闭包里再写return直接编译错误了。而如果写成return@test1的话,虽然不会报错了。但是这个时候即便去掉crossinline关键字也是会执行闭包之后的代码的。

    作者回复: 应该是你代码写错了吧,可以对照代码看一下 https://github.com/kymjs/KotlinPrimer/blob/master/Project7/src/main/kotlin/com/kymjs/kotlinprimer/unit1/LambdaReturnDemo.kt

    这段代码我在1.2.61版本上也运行了一遍,应该不是版本问题

    
    
  • 拉马库斯阿尔德里奇
    2018-09-13
    我的天我竟然跟上思路听懂了。
    
    
我们在线,来聊聊吧