引用同名的函数参数

时间:2012-01-24 09:50:54

标签: scala

假设我有一个特性,其val值与尝试创建特征实例的函数的参数相同:

def func(param: String) {
  val _param = param
  new SomeTrait {
    val param = _param
  }
}

有没有更好的方法来引用函数参数'param'?

3 个答案:

答案 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)
}

我刚刚为参数引入了一个匿名封装/抽象函数,我称之为。

结果更简洁,更具有可读性