我正在尝试编写一个通用的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像其他函数一样访问我可以使用的函数对象?
(_: 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)
但更简洁.