2014-07-16 32 views
3

例如說我有導入從其他類功能斯卡拉

class foo{ 
    def bar = 7 
} 

class qaz{ 
    //Here I want to have something like: val foobar = bar 
    //What I don't want to have is val foobar = (new foo).bar 
} 

卡尼如何實現這一目標?

回答

5

您可以使用foo的伴侶對象來定義bar

然後,你可以簡單地將其導入qaz

// in foo.scala 
object foo { 
    def bar = 7 
} 
class foo { 
    // whatever for foo class 
} 

// in qaz.scala 
import mypackage.foo.bar 
class qaz { 
    val foobar = bar  // it works! 
} 
+0

爲此,foo需要成爲foo.scala的伴侶對象?我還可以有班級嗎? – zunior

+0

是的,你可以。我編輯了我的答案以清除它 –

1

有2種方式來實現這一目標:

  1. 使用伴侶對象

  2. Case Class

第二種方法,即需要一個伴侶對象納入方法,如已經由Jean實現:

class foo { 
// whatever for foo class 
} 

//Companion Object 
object foo { 
    def bar = 7 
} 

class qaz { 
    val foobar = bar 
} 

通過創建一個案例類,而不是一個普通的類,爲您創造了很多的樣板代碼,其中之一是應用方法的生成,因此您不需要使用new關鍵字來創建該類的新實例。

case class foo{ 
    def bar = 7 
} 

class qaz{ 
    val foobar = bar 
} 

這些方法中的兩個都是那種語法糖,但這樣做在後面同樣的事情,那就是使用一個同伴對象的應用功能。 嘗試this瞭解更多信息。

+1

如果您檢查它,您的代碼將無法編譯。 –

+0

哪一部分是特指? – ameenkhan07

+1

'case class foo {...}'(在第二種情況下,除非使用非常古老的Scala版本)和'val foobar = bar'(在這兩種情況下)。 –