我正在学习方法链。我提供了一个有效的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版本不起作用以及为什么?
答案 0 :(得分:3)
您需要编译并调用scala字节码。此外,如果您的this.type
为Printer
,则无需指定final
,例如如果您的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
答案 1 :(得分:0)
您应该在脚本中调用main方法。
new Driver().main(...)
可以解决您的问题。
此外,在对象中定义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(...)
祝你好运!