Scala 方法链 - 你好世界

Scala method chaining - hello world

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

您应该在脚本中调用 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(...)

祝你好运!

您需要编译并调用您的 Scala 字节码。此外,如果您的 Printerfinal,则无需指定 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