这是部分应用的功能吗?

时间:2015-11-05 01:03:19

标签: scala

最近我找到了一个代码段:

case t @ MethCall(o,m) => ((t -> input)(o)) match {
  case Some(o @ ObjType(_,_)) => o.retType(m)
  case _ => None
}

我对下一个表达感兴趣:

(t -> input)(o)

我知道(t -> input)Tuple2。但是什么意味着调用(o)?我在Tuple2找不到这样的工厂方法。那么(t -> input)(o)在代码段中意味着什么?

1 个答案:

答案 0 :(得分:3)

在这种情况下猜测->的含义并不容易。它不必是Scala Predef / ArrowAssoc中定义的->。以下是几种选择:

1)它可以定义为MethCall类的方法:

case class MethCall(v: Int) { def ->(in: String)(other: String) = in + v + other }
scala> (MethCall(1) -> "input: ")(" ,other")
res1: String = input: 1 ,other

2)它也可能是从Tuple2Function1的隐式转换,它使用apply / ()方法:

implicit def tuple2toFunct1[A, B, C](t: Tuple2[A, B]) = (v: C) => identity(v)
scala> (1 -> 2)("three")
res1: String = three

确保您可以在IDE / REPL中检查表达式的类型。