【发布时间】:2016-05-20 23:11:42
【问题描述】:
在 Kotlin 中,具有至少一个参数的函数可以定义为常规非成员函数或 extension function,其中一个参数是接收者。
至于作用域,似乎没有区别:两者都可以在类和其他函数内部或外部声明,并且两者都可以或不能具有同等的可见性修饰符。
语言参考似乎不建议针对不同情况使用常规函数或扩展函数。
所以,我的问题是:什么时候扩展函数比普通的非成员函数更有优势?什么时候普通函数优于扩展?
foo.bar(baz, baq) 与 bar(foo, baz, baq).
这只是函数语义的暗示(接收器绝对是焦点)还是存在使用扩展函数使代码更清晰或开辟机会的情况?
【问题讨论】:
-
这可能是见仁见智,但经典的例子是 list.sort() 而不是 Collections.sort(list):静态实用函数可以成为扩展函数。
-
@nhaarman 关于这个话题的有趣观点——并不是每个实用函数都应该成为扩展:medium.com/@dimsuz/…
-
@Ilya,感谢您的链接,提示似乎足以让您在心里记下。 :)
标签: kotlin code-structure