我试着写一个函数,它可以插入到任何表达式中,以便记录值:
val x = (2.debug() + 3.debug()).debug("2+3")
但是我写了下面的无限循环:
fun debug (message: String) {
Log.d (R.string.app_name.toString(), message) }
fun <T> T.debug (tag: String = "value"): T {
debug ("$tag: $this")
return this
}
我的目标是编写一个“普通”函数(第一个)和一个扩展函数(第二个),扩展函数应该调用普通函数。
我的代码中的问题是:扩展函数调用它自己而不是普通函数。2我不明白这一点,因为我没有在扩展函数中指定一个示例接收器。
如何解决这个问题?
2条答案
按热度按时间vof42yt11#
如果每个函数中的参数名称不同,则可以更改第二个函数,使其使用命名参数调用第一个函数:
2uluyalo2#
我找不到从扩展方法中剥离
this
的方法,因此最好的方法是创建不同名称的 Package 器:我认为您希望将现有呼叫保留到
debug
,而这可以实现。我尝试研究反编译代码(为了清楚起见,去掉了默认参数),希望通过名称空间来区分它们:
但是这两个方法在同一个命名空间中,唯一区分它们的方法是通过参数。
我想你已经让Kotlin崩溃了。