只是
Scala的一个简单例子:
scala> def f(x: Int) = x f: (x: Int)Int scala> (f _)(5) res0: Int = 5
让我们通用:
scala> def f[T](x: T) = x f: [T](x: T)T scala> (f _)(5) <console>:9: error: type mismatch; found : Int(5) required: nothing (f _)(5) ^
我们来看看Scala中多态方法的扩展:
scala> f _ res2: nothing => nothing = <function1>
与Haskell比较:
Prelude> let f x = x Prelude> f 5 5 Prelude> f "a" "a" Prelude> :t f f :: t -> t
Haskell确实推断了正确的类型[T] => [那里.
更现实的例子?
scala> identity _ res2: nothing => nothing = <function1>
更现实:
scala> def f[T](l: List[T]) = l.head f: [T](l: List[T])T scala> f _ res3: List[nothing] => nothing = <function1>
你不能为别人做别名 – 必须写你自己的功能.像[T,U](t:T,u:U)=> t – > u(make tuple)不可能用作值.更一般的 – 如果你想传递一些依赖于通用类型的lambda(例如,使用泛型函数,例如:创建列表,元组,以某种方式修改它们) – 你不能这样做.