问题描述
我目前正在学习方法链接。 我提供了一个有效的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版本不起作用以及为什么吗?
1楼
您需要编译并随后调用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
2楼
您应该在脚本中调用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(...)
祝好运!