:Scalaでは、外側のスコープで定義されたシンボル(変数)にアクセスする方法はありますか?たとえば
def factory(_name: String) = new Person {
val name: String = _name
}
私は外側のスコープで_name
の名前をマングル避けるために探しています。遠くの理想的なアプローチから、これは「トリックをする」一方で
:Scalaでは、外側のスコープで定義されたシンボル(変数)にアクセスする方法はありますか?たとえば
def factory(_name: String) = new Person {
val name: String = _name
}
私は外側のスコープで_name
の名前をマングル避けるために探しています。遠くの理想的なアプローチから、これは「トリックをする」一方で
:
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章)にはシャドーイングについてのセクションがありますが、これらの「暗黙の」スコープを限定する方法については決して論じません。
ハッピーコーディング。
ありがとうございます。私はこの小さなトリックを見たことがありますか?関数内で暗黙的にパラメーターを使用したいが、パラメーターを関数の署名に暗黙的に宣言したくないとします。 'implicit val _ = x '(ここでxは関数のパラメータの名前です)を実行できます。 –
@ landon9720私はそれを知らなかった。 –
@pstという意味です: 'name'はメソッド' factory'のインターフェースの一部なので、それをマングルしてはいけませんが、答えとしてローカル変数を導入するべきです。 –