2011-09-15 2 views
7

Scalaでは、外側のスコープで定義されたシンボル(変数)にアクセスする方法はありますか?たとえば

def factory(_name: String) = new Person { 
    val name: String = _name 
} 

私は外側のスコープで_nameの名前をマングル避けるために探しています。遠くの理想的なアプローチから、これは「トリックをする」一方で

+0

@pstという意味です: 'name'はメソッド' factory'のインターフェースの一部なので、それをマングルしてはいけませんが、答えとしてローカル変数を導入するべきです。 –

答えて

6

abstract class Person { val name: String } 
def factory(name: String) = { 
    val _name = name 
    new Person { 
    val name: String = _name 
    } 
} 
factory("Fred").name // Fred 

私は近くに取得するために他の方法を知りません。 Scala Language Specification(第2章)にはシャドーイングについてのセクションがありますが、これらの「暗黙の」スコープを限定する方法については決して論じません。

ハッピーコーディング。

+3

ありがとうございます。私はこの小さなトリックを見たことがありますか?関数内で暗黙的にパラメーターを使用したいが、パラメーターを関数の署名に暗黙的に宣言したくないとします。 'implicit val _ = x '(ここでxは関数のパラメータの名前です)を実行できます。 –

+0

@ landon9720私はそれを知らなかった。 –

関連する問題