方法中的Scala不明确变量名称

时间:2011-11-03 01:16:07

标签: scala variables scoping shadowing

我见过一些关于Scala和变量范围的问题(例如Scala variable scoping question

但是,我无法让我的特定用例工作。

假设我有一个名为Repo的特征:

trait Repo {
    val source: String
}

然后我有一个方法来创建Repo的实现...

def createRepo(source: String) = 
  new Repo {
    val source: String = source
  }

当然,我有两个source变量正在使用中,一个在方法级别,一个在Repo实现中。如何从我的source定义中引用方法级Repo

谢谢!

2 个答案:

答案 0 :(得分:2)

不确定这是否是规范方式,但它有效:

def createRepo(source: String) = {
  val sourceArg = source
  new Repo {
    val source = sourceArg
  }
}

或者,你可以给你的参数输入一个不会发生冲突的不同名称。

或者,建厂:

object Repo {
  def apply(src: String) = new Repo { val source = src }
}

def createRepo(source: String) = Repo(source)

答案 1 :(得分:1)

除了Luigi的解决方案之外,您还可以考虑将Repo从特质更改为类,

class Repo(val source: String)
def createRepo(source: String) = new Repo(source)