斯卡拉方法链 - 世界你好
问题描述:
我目前正在学习方法链。我提供了一个工作python的例子。斯卡拉方法链 - 世界你好
#!/bin/python3
import sys
class Generator(object):
def __init__(self):
return None
def echo(self, myStr):
sys.stdout.write(myStr)
return self
g = Generator()
g.echo("Hello, ").echo("World!\n")
但是,Scala版本似乎不工作,没有文本正在输出。
#!/usr/bin/env scala
final class Printer() {
def echo(msg: String): this.type = {
println(msg)
this
}
}
class Driver {
def main(args: Array[String]) {
var pr = new Printer();
pr.echo("Hello, ").echo("World!")
}
}
有谁知道为什么Scala的版本不工作,为什么?
答
你需要编译并调用你的scala字节码。另外,如果您的Printer
是final
,例如,您不需要指定this.type
。如果您driver.scala
文件包含:
final class Printer() {
def echo(msg: String) = {
println(msg)
this
}
}
object Driver {
def main(args: Array[String]) {
var pr = new Printer();
pr.echo("Hello, ").echo("World!")
}
}
然后只要致电:
scalac driver.scala
scala Driver
+0
谢谢,将类更改为对象,然后编译然后执行修复它。 –
答
您应该在脚本中调用main方法。
new Driver().main(...)
应该解决你的问题。
此外,在对象中定义主要方法是一种规范。
所以,与其
class Driver {
def main(args: Array[String]) {
var pr = new Printer();
pr.echo("Hello, ").echo("World!")
}
}
new Driver().main(...)
我建议如下。
object Driver {
def main(args: Array[String]) {
var pr = new Printer();
pr.echo("Hello, ").echo("World!")
}
}
Driver.main(...)
祝你好运!
代码是好的,对我的作品,一定是你运行它的方式。 – Zyga
scala ./hello.sh –
您需要先使用scalac编译文件,然后运行编译后的.class文件。 – Zyga