如何作为函数对象访问像toInt()这样的Scala隐式函数?

时间:2014-07-24 18:02:54

标签: scala

我正在尝试编写一个通用的String转换器函数,它接受一个字符串和一个转换函数,并将该函数应用于字符串:

def convertString[A](s: String, f: String => A): A = f(s)

我正在尝试将toInt函数作为f传递,但我的IDE一直在抱怨Cannot resolve symbol toInt

如何将toInt作为一个我可以使用的函数对象访问,就像任何其他函数一样?

1 个答案:

答案 0 :(得分:6)

(_: String).toInt有效:

scala> val myStr = "4"
scala> convertString(myStr, (_: String).toInt)
res0: Int = 4

基本上,我们需要强制Scala隐式地将输入String对象强制转换为StringOps对象,然后在该StringOps对象上调用toInt。解开魔法,我们可以尝试以下方法:

scala> val f = (_: String).toInt
f: String => Int = <function1>

我们必须指定输入类型是String,然后Scala负责在调用toInt时隐式地将String转换为StringOps。这相当于说

scala> def f: String => Int = _.toInt

但更简洁。