我正在尝试编写一个通用的String转换器函数,它接受一个字符串和一个转换函数,并将该函数应用于字符串:
def convertString[A](s: String, f: String => A): A = f(s)
我正在尝试将toInt
函数作为f
传递,但我的IDE一直在抱怨Cannot resolve symbol toInt
。
如何将toInt
作为一个我可以使用的函数对象访问,就像任何其他函数一样?
答案 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
但更简洁。