Scala方法链接 - 你好世界

时间:2017-02-16 14:46:06

标签: python scala fluent chaining

我正在学习方法链。我提供了一个有效的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版本不起作用以及为什么?

2 个答案:

答案 0 :(得分:3)

您需要编译并调用scala字节码。此外,如果您的this.typePrinter,则无需指定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(...)
祝你好运!