scala - 为什么Scala编译不允许作用域方法重载?

标签 scala compiler-errors compilation

我注意到,scala编译器不允许范围方法重载。
Scala版本2.11.12

无法编译:

val result = {
  def loop(a: String): String = ???

  def loop(i: Int): Int = ???

  ???
}

正确编译:
def loop(a: String): String = ???

def loop(i: Int): Int = ???

val result = ???

问题:
  • 为什么会这样?
  • 在范围内和范围外具有方法之间有什么区别?
  • 最佳答案

    重载是在对象上调用方法时发生的,而裸函数调用则不会发生。因此,您只能为类定义重载方法。块不是类,因此不能有重载的方法。

    您的“正确编译”代码仅在直接放在类/对象内部时才起作用。

    关于scala - 为什么Scala编译不允许作用域方法重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53121307/

    相关文章:

    scala - [SlickException : Read NULL value for column (USERS/670412212). LOGIN_ID]

    scala - maven中scaladoc的多模块聚合

    dom - 在React组件中关注输入字段–尝试创建引用时出现类型错误

    c++ - 无法使派生的WebDuino类正常工作-使用 'Web_HelloWorld.ino'编译错误

    lua - 从 Common Lisp 调用 Lua

    scala - 将消息转发到下一个 Round Robin 路由器

    scala - Groupby 类似于 Python 的 itertools.groupby

    python - (class,def,self)AttributeError : 'xx' object has no attribute 'xx'

    compiler-construction - 为什么 Julia 编译器不优化这个循环?

    compilation - Raku 程序编译和执行的顺序(可能是嵌套编译阶段?)