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]
在这里意味着什么?
答案 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
的实际类型,或者可以从上下文中推断出来。