在Scala中,有没有办法访问外部作用域中定义的符号(变量)?

Lan*_*uhn 9 scala

例如:

def factory(_name: String) = new Person {
    val name: String = _name
}
Run Code Online (Sandbox Code Playgroud)

我希望避免破坏_name外部范围的名称.

小智 7

虽然远非一种理想的方法,但这"诀窍":

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

我不知道有任何其他方法可以接近.Scala语言规范(第2章)中有一节讨论了阴影 - 而且它没有讨论限定那些"隐含"范围的方法.

快乐的编码.

  • 谢谢.你有没有看到我偶然发现的这个小伎俩?在函数内,假设您要隐式使用参数,但您不希望将参数声明为函数签名中的隐式参数.你可以做`implicit val _ = x'(其中x是函数参数的名称). (5认同)