Scala方法中的变量名不明确
我看到了一些关于Scala和变量作用域的问题(例如) 然而,我很难让我的特定用例正常工作 假设我有一个叫做回购的特质:Scala方法中的变量名不明确,scala,variables,scoping,shadowing,Scala,Variables,Scoping,Shadowing,我看到了一些关于Scala和变量作用域的问题(例如) 然而,我很难让我的特定用例正常工作 假设我有一个叫做回购的特质: trait Repo { val source: String } 然后我有一个方法来创建Repo的实现 def createRepo(source: String) = new Repo { val source: String = source } 当然,我使用了两个source变量,一个在方法级别,另一个在Repo实现内部。如何从我的Repo
trait Repo {
val source: String
}
然后我有一个方法来创建Repo的实现
def createRepo(source: String) =
new Repo {
val source: String = source
}
当然,我使用了两个source
变量,一个在方法级别,另一个在Repo
实现内部。如何从我的Repo
定义中引用方法级源
谢谢 不确定这是否是一种规范的方式,但它是有效的:
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)
除了路易吉的解决方案之外,您还可以考虑将<代码> ReP< <代码>从一个特性更改为一个类,
class Repo(val source: String)
def createRepo(source: String) = new Repo(source)
因为两者都引用同一个对象,所以这不重要。@user unknown,这很重要,因为在第二个实例中,source
被“递归”绑定,但类初始化语义使其null
。从REPL中尝试它,您将看到:createRepo(“hi”)。source==null
。