我有以下代码:
object ContraCats {
val showString = Show[String]
def main(args: Array[String]): Unit = {
val m = showString.contramap[Symbol](_.name).show('dave)
val a = showString.contramap[Symbol](_.name)('dave)
}
}
正如您所看到的,可以将其作为currying版本编写,将另一个编写为方法调用。为什么有可能?
答案 0 :(得分:4)
contramap
会返回Show
个实例。
Show
同时包含show
和apply
方法。
apply
方法在Scala中很特殊,因为这两个方法是等价的:
someValue.apply(someArg)
someValue(someArg)
因此,在您的示例中,您正在调用apply
返回的Show
实例上的contramap
方法,即
val m = showString.contramap[Symbol](_.name).show('dave)
val a = showString.contramap[Symbol](_.name).apply('dave)
虽然上面的解释是有道理的,但我意识到猫的Show
没有apply
方法,所以你的代码不应该编译(我试过REPL而不是)