2016-07-13 6 views
0

は、私は、このように、その本体で変数を宣言関数を定義すると言います私が何度何度も関数を呼び出すのか?イディオムは

val x = new X() 
def foo = { 
    x.bar 
} 

のが、関数の範囲内で、xの定義を保つ:つまり、私は達成することができますか?

+0

'lazy val foo = new X'のような意味ですか? –

+1

なぜ変数を関数のスコープ内に保持したいのですか?状態が複数の関数呼び出しを超越するという事実は、そのスコープがクラス変数またはオブジェクト変数でなければならないことを意味します。 –

答えて

0

xが本当にシングルトンの場合は、シングルトンコンテキストに入れる必要があります。これを行うためのScalaの方法は、オブジェクトを作成することです。 fooはコンパニオンオブジェクトを持つクラスの一部である

object xHolder { 
    val x = new X() 
} 
... 
def foo = { 
    import xHolder._ 
    x.bar 
} 

場合、あなたにもそれをそこに置くことができます。

1

これはできません。あなたの変数がブロック内で宣言されている場合B.この変数はBの外で見ることはできません。

あなたができることは、定義外で属性を可視にするためのクラスまたはオブジェクトを作成することです。

object CoolObject { 
    val x = new X() 

    def foo = { 
     // [...] 
     x.bar 
     // [...] 
    } 
} 
関連する問題