样本scala高阶函数解释

时间:2016-06-27 00:30:29

标签: scala

object Demo {
     def main(args: Array[String]) {
          println( apply( layout, 10) )
     }

     def apply(f: Int => String, v: Int) = f(v)

     def layout[A](x: A) = "[" + x.toString() + "]"
}

我是Scala的新手,对上面的代码感到有点困惑。

根据我的理解,apply将另一个函数和一个整数作为输入。 它将整数v传递给函数f作为其输入参数。 layout[A]在这里意味着什么?

2 个答案:

答案 0 :(得分:2)

语法

def layout[A](x:A)

声明一个新的通用函数。在这种情况下,函数layout在其唯一参数中是通用的,因此您可以在任何值上调用layout,这将是合法的Scala。

在Java中,这将被编写为某个类的方法,但语法类似:

String layout<A>(A x)

Twitter's Scala school has a good explanation了解Scala中如何使用类型。

答案 1 :(得分:1)

它被称为类型参数。

如果您编写def f(x: Int) = ....,编译器现在知道对x的所有以下引用都将涉及某个整数值。

如果你写def f(x: A) = ....,编译器会抱怨,&#34; A?什么是A?我不知道A是什么!&#34;

如果您编写def f[A](x: A) = ....,编译器会在调用x时知道将提供f的实际类型,或者可以从上下文中推断出来。