假设我有一个特性,其val值与尝试创建特征实例的函数的参数相同:
def func(param: String) {
val _param = param
new SomeTrait {
val param = _param
}
}
有没有更好的方法来引用函数参数'param'?
答案 0 :(得分:4)
恐怕没有更好的方法。根据您需要初始化SomeTrait
的频率,您可以编写工厂方法来减少某些样板文件。
trait SomeTrait {
def param: String
}
object SomeTrait {
def apply(param: String): SomeTrait = {
val _param = param
new SomeTrait {
def param = _param
}
}
}
def func(param: String) = {
SomeTrait(param)
}
答案 1 :(得分:1)
在您的示例中,将SomeTrait
转换为类是有意义的。
class SomeClass(val param: String)
def func(param: String) = new SomeClass(param)
如果你不能以这种方式重构,那么你应该简单地重命名参数:
def func(p: String) {
new SomeTrait {
val param = p
}
}
答案 2 :(得分:0)
如果没有apply
方法加上伴侣对象
trait SomeTrait {
val param:String
}
class A {
def func(param:String):SomeTrait = ((p:String) => new SomeTrait { val param = p })(param)
}
我刚刚为参数引入了一个匿名封装/抽象函数,我称之为。
结果更简洁,更具有可读性