请稍等 ...
×

采纳答案成功!

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

扩展函数调用扩展函数

您好老师,请问下下面代码B方法里的this为什么会是"car",是因为A方法在调用B方法的时候会自动转成 “car”.B()吗?图片描述

正在回答 回答被采纳积分+3

2回答

bennyhuo 2022-01-13 14:36:32

不清楚原因看不到你的回复哈(可能是平台要审核)。

这个问题的关键之处在于同学要理解一下扩展函数的 receiver。这里调用B的时候 receiver 应该是一个 String,它是怎么提供给 B的呢?

0 回复 有任何疑惑可以回复我~
bennyhuo 2022-01-13 11:50:07

你觉得应该是什么

0 回复 有任何疑惑可以回复我~
  • 提问者 移动客户端 #1
    this肯定是String,但至于为啥是"car"就有点懵圈,如果是直接调用"car".B( ),那this就是"car",这好理解; 但现在是调用"car".A( ), 这个"car"是怎么从A方法传递到B方法的;
    
    主要是对比java的写法产生迷惑,下面的java写法中容易理解this就是car, 可能是A方法和B方法都是属于car实例对象的,都在car实例的上下文范围内,所以好理解;
    
    但在Kotlin中 扩展函数A 和 B是独立分开的,不属于"car" 同个上下文范围内, 那这里调用"car". A( ) ,B()为什么能得到它的this就是“car”
    
    class Car{
    	publlic void A(){
    	  B();
    	}
    
    	publlic void B(){
    	  println(this) //当main方法里调用car.A(),这里的this就是car,这好理解
    	}
    
    	public static void main(args[] String){
    	  Car car = new Car();
    	  car.A();
    	}
    
    }
    回复 有任何疑惑可以回复我~ 2022-01-13 14:32:35
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信