【发布时间】:2012-09-27 20:08:05
【问题描述】:
我正在尝试使用带有隐式参数的一些方法来定义一个类:
object Greetings {
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
我使用另一个类的这个类
implicit val greetings = "hello" //> greetings : java.lang.String = hello
Greetings.say("loic") //> res0: String = hello loic
Greetings.say("loic")("hi") //> res1: String = hi loic
我的问题是它只有在我在 Greetings 对象之外定义隐式 val 时才有效。 我希望能够提供带有隐式参数的方法,并在我的类中使用默认值,以便更轻松地使用我的 API(如 Scala 集合 API)。
所以我想这样做,但它不起作用(未找到隐式值):
object Greetings {
implicit val greetings = "hello"
def say(name: String)(implicit greetings: String): String = greetings + " " +name
}
然后
Greetings.say("loic")
Greetings.say("loic")("hi")
我知道我可以使用(implicit greetings: String = "hello") 定义一个默认值,但我想在类级别进行,以避免在有很多方法时重复。
我想我错过了什么,因为我看到 CanBuildFrom 是在 List 类中定义的,例如。
【问题讨论】:
标签: scala