Scala 如何缩短作为参数传递函数的语法?
介绍 在我使用的外部库中,类org.scaloid.common.TraitAdapterView包含函数onItemClick,定义为:Scala 如何缩短作为参数传递函数的语法?,scala,currying,Scala,Currying,介绍 在我使用的外部库中,类org.scaloid.common.TraitAdapterView包含函数onItemClick,定义为: @scala.inline def onItemClick[U]( f : scala.Function4[android.widget.AdapterView[_], android.view.View, scala.Int,
@scala.inline
def onItemClick[U](
f : scala.Function4[android.widget.AdapterView[_],
android.view.View,
scala.Int,
scala.Long, U]) : V =
{ /* compiled code */ }
其中V在类的顶部定义:
trait TraitAdapterView[V <: android.widget.AdapterView[_]]
我可以打电话给你
listView.onItemClick((a, b, c, d) => onClick(a, b, c, d))
但以下方法不起作用:
为什么??我应该修改什么才能使其工作?onItemClick[U]的参数是一个函数4,即一个包含四个参数的函数,如类型参数所述。当你写这个符号时:
(a, b, c, d) => onClick(a, b, c, d)
onClick
onClick _
您正在创建一个签名几乎正确的匿名函数4。我认为这不应该被编译。你确定吗?问题是onClick的返回类型是Int,而onItemClick参数所需的返回类型是VonClick_u,u,u,u,可能会工作。错误消息是什么?谢谢,@GáborBakos。实际上,这起作用了:onClick_
onClick
onClick _
scala> def foo(f: Function1[Int,Int]) : Int = f(1)
foo: (f: Int => Int)Int
scala> def bar(i: Int) : Int = 3
bar: (i: Int)Int
scala> foo(bar)
res0: Int = 3
scala> foo(bar _)
res1: Int = 3
scala> foo((i) => bar(i))
res2: Int = 3