Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何缩短作为参数传递函数的语法?_Scala_Currying - Fatal编程技术网

Scala 如何缩短作为参数传递函数的语法?

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,

介绍

在我使用的外部库中,类org.scaloid.common.TraitAdapterView包含函数onItemClick,定义为:

@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