gpt4 book ai didi

scala - 什么时候需要 Scala 分号

转载 作者:行者123 更新时间:2023-12-01 09:34:32 28 4
gpt4 key购买 nike

我被困在工作中,电脑被锁定。但我正在尝试练习我的 Scala。我正在使用 Ideone.com,因为我什至无法安装 scalac...

无论如何这不是编译:

class DPt(var name: String, var x: Double, var y: Double){

def print = println("DPt; name: " + name + " x: " + x + " y: " + y)
}


object Main {
def main(args: Array[String]) {
val pt0 = new DPt("Joe", 1.0, 1.0)
println("checking generated accessor: " + pt0.x)
pt0 print
pt0.x_=(3.0)
pt0 print
}
}

我从 Ideone.com scala 编译器收到这条消息:

Main.scala:12: error: Unit does not take parameters
pt0 print
^
one error found
spoj: The program compiled successfully, but Main.class was not found.
Class Main should contain method: def main(args: Array[String]).

但是,当我在语句的末尾添加分号时,如下所示:

class DPt(var name: String, var x: Double, var y: Double){

def print = println("DPt; name: " + name + " x: " + x + " y: " + y)
}


object Main {
def main(args: Array[String]) {
val pt0 = new DPt("Joe", 1.0, 1.0);
println("checking generated accessor: " + pt0.x);
pt0 print;
pt0.x_=(3.0);
pt0 print;
}
}

我发现 Scala 中的中缀和后缀表示法是 AWESOME,但我一定遗漏了一些东西。为什么 Scala 不将行尾视为语句的结尾?


这个博客的第二张海报似乎有答案。 Scala 的人应该继续这样做。这样的烦恼....虽然这是我在这种原本美丽的语言中遇到的第一个令人讨厌的问题。 http://www.scala-lang.org/node/4143

直接来自文档的另一个解释: http://docs.scala-lang.org/style/method-invocation.html

最佳答案

当您删除点时,Scala 假定您使用的是 arg0 operator arg1 语法。 1 + 2 之类的东西也是如此:Scala 假设参数将跟随运算符。

因此,假设 print 是一个接受参数的方法,它会转到下一行寻找参数。你会得到一个错误,因为这实际上不起作用:print 不接受参数。

通过添加分号,您告诉编译器该方法肯定不会有参数,因此它将停止寻找。这有助于编译器找出 print 不需要参数,所以一切都很好。

要解决问题,只需说 pt0.print 就可以了。

关于scala - 什么时候需要 Scala 分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656799/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com