最近我找到了一个代码段:
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)
在代码段中意味着什么?
答案 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)它也可能是从Tuple2
到Function1
的隐式转换,它使用apply
/ ()
方法:
implicit def tuple2toFunct1[A, B, C](t: Tuple2[A, B]) = (v: C) => identity(v)
scala> (1 -> 2)("three")
res1: String = three
确保您可以在IDE / REPL中检查表达式的类型。