2017-02-16 47 views
0

我目前正在學習方法鏈。我提供了一個工作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

回答

2

你需要編譯並調用你的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

謝謝,將類更改爲對象,然後編譯然後執行修復它。 –

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(...) 

祝你好運!