我见过一些关于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
?
谢谢!
答案 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)