Scala-显式引用参数
鉴于这一令人敬畏的完全专业的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
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=>
的东西来设置名称,但是这种技巧似乎不适用于函数声明。。。