Scala-显式引用参数

Scala-显式引用参数,scala,Scala,鉴于这一令人敬畏的完全专业的Scala: trait SomethingCool { def foo: Int => String } def makeSomethingCool(foo: Int => String = i => i.toString): SomethingCool = { new SomethingCool { override def foo = foo // method foo does nothing other than call

鉴于这一令人敬畏的完全专业的Scala:

trait SomethingCool {
  def foo: Int => String
}

def makeSomethingCool(foo: Int => String = i => i.toString): SomethingCool = {
  new SomethingCool {
    override def foo = foo // method foo does nothing other than call itself recursively
  }
}

如果我有一个trait的工厂方法,它有一个默认的实现,那么如何从
newsomethingcool{}
中引用参数名呢?它似乎被特征的函数名掩盖了。

你不能。但这里有一个解决办法:

def makeSomethingCool(foo: Int => String = i => i.toString): SomethingCool = {
  val _foo = foo
  new SomethingCool {
    override def foo = _foo
  }
}

你不能。但这里有一个解决办法:

def makeSomethingCool(foo: Int => String = i => i.toString): SomethingCool = {
  val _foo = foo
  new SomethingCool {
    override def foo = _foo
  }
}

你不能把这个参数叫做别的什么吗?我可以用某种形式的“为什么我没有想到这个”或者甚至是“这不是关于变量名范围规则的问题的答案”,但我不会。相反,我会说“谢谢你的建议,我会记住的。”哦,我不是想粗鲁什么的。如果你这么想,我很抱歉。别担心!我只是想了解Scala使用的范围规则。。。看起来,如果这是在新的trait实例中,那么我可以使用类似于
self=>
的东西来设置名称,但是这个技巧似乎对函数声明不起作用……你不能调用其他参数吗?我可以用某种形式的“为什么我没有想到这个”或者甚至是一个“这不是关于变量名范围规则的问题的答案”,但我不会。相反,我会说“谢谢你的建议,我会记住这一点。”。“哦,我不是想粗鲁什么的。如果你这么想,我很抱歉。别担心!我只是想了解Scala使用的范围规则。。。看起来,如果这是在新的trait实例中,那么我可以使用类似于
self=>
的东西来设置名称,但是这种技巧似乎不适用于函数声明。。。