我回答了一个关于函数映射的问题在 Scala 中定义从字符串到函数的映射 https://stackoverflow.com/questions/4617660/defining-a-map-from-string-to-function-in-scala这导致了Function1[_, String]
我认为就打字问题而言是正确的,但可能没用,因为我不知道如何调用这样的函数:
scala> def f(x: Int) = x.toString
f: (x: Int)java.lang.String
scala> f(8)
res0: java.lang.String = 8
scala> val g: Function1[_, String] = f _
g: Function1[_, String] = <function1>
scala> g(8)
<console>:8: error: type mismatch;
found : Int(8)
required: _$1 where type _$1
g(8)
^
scala> val h: Function1[Int, String] = g
<console>:7: error: type mismatch;
found : (_$1) => String where type _$1
required: (Int) => String
val h: Function1[Int, String] = g
有什么办法可以使用吗g
?
scala> g.asInstanceOf[Any => String](5)
res3: String = 5
它会起作用,因为所有函数都会擦除相同的内容:Function1[AnyRef, AnyRef]
。当您将其指定为Any
,然后传递一个AnyVal
将在调用时自动装箱(并且将在方法中自动拆箱)。
但是,您必须传递正确的参数类型。要不然...
scala> g.asInstanceOf[Any => String](true)
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.Integer
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)