是否可以通过将接收器对象作为第一个参数传递来调用具有接收器对象的函数?

时间:2017-05-30 16:39:34

标签: kotlin

使用Kotlin关于函数文字与Receiver的文档中的示例:

val sum = fun Int.(other: Int): Int = this + other

可以像这样调用sum函数,就像它是接收器对象的方法一样:

1.sum(2)

但是我注意到我们也可以调用这样的函数:

sum(1, 2)

当然,他们都给出了相同的结果。我的问题是,如果行为是预期的?或者我在文档中遗漏了什么?

1 个答案:

答案 0 :(得分:2)

是的,扩展函数被编译为静态函数,接收者作为第一个参数。例如:

 fun Int.sum(other: Int): Int = this + other
有点编译:

 static int sum(int receiver, int other) {
   return receiver + other;
 }