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

Gre*_*wen 1 scala

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

def convertString[A](s: String, f: String => A): A = f(s)
Run Code Online (Sandbox Code Playgroud)

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

如何toInt像其他函数一样访问我可以使用的函数对象?

Gre*_*wen 6

(_: String).toInt 作品:

scala> val myStr = "4"
scala> convertString(myStr, (_: String).toInt)
res0: Int = 4
Run Code Online (Sandbox Code Playgroud)

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

scala> val f = (_: String).toInt
f: String => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

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

scala> def f: String => Int = _.toInt
Run Code Online (Sandbox Code Playgroud)

但更简洁.