【问题标题】:Kotlin extension functions - completion?Kotlin 扩展功能 - 完成?
【发布时间】:2023-03-06 05:34:02
【问题描述】:

我看过一些关于学习 Kotlin 的教程,我对下面引用中使用的“完成”这个词的含义感到困惑。演讲者是 JetBrains 的一名开发人员,摘自抄本(不是 youtube 字幕):

在这里,我们定义了一个名为 lastChar 的字符串扩展函数,并且 我们可以将其用作成员函数。它在完成时可见,所以它 很容易被发现。就像定义的常规效用函数 课外。但另一方面,由于完成,它 可以像会员一样轻松找到和使用。

在这个用法中完成这个词是什么意思?

谢谢。

【问题讨论】:

  • 完成是指完成您输入的代码的建议,由 IDE 提供。所以,如果有一个名为getData的函数,你输入get,getData就会出现在光标下方的代码补全列表中,快速补全你的代码。例如 - see this image.

标签: kotlin definition completion


【解决方案1】:

在对象后键入. 后,您可以在自动完成框中看到其所有成员和扩展函数和属性。他们的观点是,扩展使这成为可能,否则您将不得不记住名称的实用功能。

【讨论】:

  • 出于某种原因,我认为这可能是第一次提到的答案 - 但在我看来,“感谢完成”会谈论 IDE,因为课程没有提到一个我记得的特定 IDE - 他们只显示了代码的白板。然而,正如我所提到的,老师是 JetBrains 的开发人员——所以我应该明白这一点。谢谢。
  • 所有现代 IDE 都将具有自动完成功能。
  • 当然,但正如我所说,他们只展示了代码白板而没有 IDE,我接下来将学习使用 Emacs 的课程 - 所以并不是每个人都使用现代 IDE 进行编码。跨度>
【解决方案2】:

它们的意思是“自动完成”,因为当您在扩展类的实例之后放置 . 时会显示它。

例如,输入"myString". 将提示以下扩展函数(如果存在):

fun String.lastChar(): Char {
    return this.last()
}

但它不会建议以下非扩展功能:

fun lastChar(value: String): Char {
    return value.last()
}

【讨论】:

    【解决方案3】:

    给定以下代码:

    class X()
    
    fun X.aaaa() {
        
    }
    
    val foo = X()
    
    foo.aa
    

    当您将光标放在 foo 之后并在 IntelliJ 中键入 .aa 时,您将看到以下上下文菜单,其中显示 aaaa 方法存在于 foo 实例上。此时您可以按Return 来“自动完成”对该方法的引用。

    请注意,aaaa() 是作为一个选项(唯一选项)提供的...作为您在以 aa 开头的 foo 实例上可用的一种方法。这就是它所说的。 aaaa() 显示为可用的实例方法,即使它被定义为 X 本身定义之外的扩展函数。

    【讨论】:

      猜你喜欢
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多