根据我在an earlier question中收到的建议,我使用"aliases"缩短了一些常用的外部函数(我无法控制)的名称 . 这对扩展功能起到了很好的作用;但是,我还有一些我想要别名的顶级函数 . 有关简化示例,请考虑 generateSequence
函数 . 我希望能够这样做:
// DOES NOT COMPILE
inline val <T:Any> seq:(()->T?)->Sequence<T> get() = ::generateSequence
...但我不能,因为通用必须在接收器类型中使用,如in this answer所述 . 有没有其他方法来创建 alias for a top-level function (requiring generics) which preserves the inline?
EDIT: 我在发布问题后尝试使用 Any?
和星形投影,但我仍然不是一个很好的答案:
inline val seq:(()->Any?)->Sequence<*> get() = ::generateSequence
这似乎是boptimalsu,因为它会影响Sequence的元素类型的类型检查,对吗?关于什么可行的其他答案/想法?
1 回答
您可以使用的选项是重命名导入,但它仅限于单个源文件:
除此之外,我认为,你能做的最好的事情是回到声明另一个内联函数:
实际上,我希望这个选项的性能优于带有函数引用的性能,因为当你调用该引用时,使用返回函数引用的内联属性仍会有一些开销,而这个调用是内联,因此不应该为另一个嵌套调用引入任何开销 .