3

我看过一些关于 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定义中引用方法级别?

谢谢!

4

2 回答 2

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)
于 2011-11-03T01:42:44.740 回答
1

除了 Luigi 的解决方案,你也可以考虑Repo从一个 trait 变成一个类,

class Repo(val source: String)
def createRepo(source: String) = new Repo(source)
于 2011-11-03T02:33:05.543 回答