我正在尝试使用一些采用隐式参数的方法来定义一个类:
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
类中定义的,例如。