【问题标题】:Where is the string operator " <- " defined in Scala?Scala 中定义的字符串运算符“<-”在哪里?
【发布时间】:2019-12-09 18:03:27
【问题描述】:

我是 scala 的新手,对此我有点困惑。我使用 IntelliJ Idea。我知道 Scala 允许将特殊字符用作方法。在 IntelliJ Idea Command+Click 方法或 Ctrl+Click 将您移动到定义方法的位置。但是,在 Scala 中,当我在 for 循环中单击 &lt;- 时,它会将我移动到:

  def foreach[U](f: Char => U): Unit = { ... } 

虽然问题是关于这个特定的运算符,但我想知道如何查找定义了其他运算符以及为什么 IntelliJ 会跳转到 foreach 语句?

【问题讨论】:

标签: scala intellij-idea


【解决方案1】:

for 理解,就像任何其他语言结构一样,在Scala Language Specification 中定义。更具体地说,在Section 6.19 For Comprehensions and For Loops

特别是左箭头&lt;-(也可以写成)是定义生成器的语法:

生成器 ? ← ? 从表达式 ? 生成绑定,该表达式以某种方式与模式 ? 匹配。

【讨论】:

  • 那么,你的意思是我看不到定义了这个
  • 这是一个语言特性。与其他所有语言特性一样,它在语言规范中定义。这不是 &lt;- 特有的东西,它甚至不是 Scala 特有的东西。库在源代码中定义,语言特性在语言规范中定义。l
  • 我知道我很困惑,因为 Scala 允许将特殊字符作为函数,所以我认为
  • 没错。当然,对于任何给定的实现,在编译器中仍然会有一些地方定义了这些语义,但你真的必须在编译器的内部寻找它。此外,它通常会在多个地方定义,至少在词法分析器、解析器、语义分析器和代码生成器中,可能还有优化器。
【解决方案2】:

java.lang.Stringscala.collection.immutable.StringOps 类中没有 &lt;- 方法。正如 intellij 所指出的,它只是 foreach 调用的语法糖。

【讨论】:

  • 是的,确实是这样,但是这个语法糖是在哪里定义的,或者它是嵌入在 Scala 语言中的?这不是必须在某处定义的别名吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2015-11-09
  • 2021-12-30
  • 2016-03-26
相关资源
最近更新 更多