【问题标题】:Scala class of out-of-class methodScala类的out-of-class方法
【发布时间】:2020-01-29 14:04:12
【问题描述】:

如果scala方法属于类,怎么能在类之外创建方法?

如:

def hello(a:String) {println(s"Hello $a")}

这个方法属于什么类?

为什么会有这样的概念(课堂外的方法)?我的第一印象是它会产生很多混乱,因为它是多余的(你已经可以拥有“正常”的功能)。

【问题讨论】:

    标签: scala function methods read-eval-print-loop scala-repl


    【解决方案1】:

    其实如果你把这段代码放到文件Smth.scala 并尝试编译它你会发现它没有

    Error:(1, 1) expected class or object definition
    def hello(a:String) {println(s"Hello $a")}
    

    我猜你在 repl 中写了这段代码。在 repl 中,每一行都编译在某个对象中。

    在 Scala 3 中,顶级定义将成为可能

    https://dotty.epfl.ch/docs/reference/dropped-features/package-objects.html

    【讨论】:

    • 我在 zeppelin 笔记本中编写 scala。所以,确实是一个 REPL。那么,在 REPL 中编译方法的“某个对象”是什么?
    • @MichelePiccolini docs.scala-lang.org/overviews/repl/overview.html "在交互模式下,REPL 在提示符处读取表达式,将它们包装在可执行模板中,然后编译并执行结果。"
    • @MichelePiccolini:标准的 Scala REPL 为每一行创建一个新对象。这是您希望在 REPL 中做的事情的唯一方法,例如重新定义 val 以更正错字,可以明智地工作,而不会仅仅为了 REPL 而显着改变语言。如果您强制出错,有时您会在堆栈跟踪中看到这些对象。
    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多