斯卡拉方法链 - 世界你好

问题描述:

我目前正在学习方法链。我提供了一个工作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

代码是好的,对我的作品,一定是你运行它的方式。 – Zyga

+0

scala ./hello.sh –

+1

您需要先使用scalac编译文件,然后运行编译后的.class文件。 – Zyga

你需要编译并调用你的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 
+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(...) 

祝你好运!