我是 Scala 的初学者,正在为 Scala 语法而苦苦挣扎。 我从 https://www.tutorialspoint.com/scala/higher_order_functions.htm 得到这行代码.
我知道 (x: A) 是布局函数的参数 (表示类型 A 的参数 x)
但是 layout 和 (x: A) 之间的 [A] 是什么?
我一直在谷歌搜索 scala 函数语法,找不到。
def layout[A](x: A) = "[" + x.toString() + "]"
最佳答案
这是一个类型参数,意味着该方法是参数化的(也有人说是“通用”)。没有它,编译器会认为 x: A
表示某个具体类型 A 的变量,当它找不到任何此类类型时,它会报告编译错误。
这在静态类型语言中相当普遍;比如Java也有同样的东西,只是语法是<A>
.
参数化方法有规则,其中类型可以出现涉及协变和逆变的概念,表示为[+A]
和 [-A]
.方差绝对不在这个问题的范围内,可能对你来说太多了,但它是一个重要的概念,所以我想我只是提一下,至少让你知道那些加号和减号的含义当你看到它们时(你会的)。
此外,类型参数可以是上限或下限,表示为 [A <: SomeType]
和 [A >: SomeType]
.这意味着泛型参数需要是另一种类型的子类型/父类(super class)型,在这种情况下是虚构类型 SomeType
.
还有更多的构造可以提供有关类型的额外信息(例如,上下文边界,表示为 [A : Foo]
,用于类型类机制),但您稍后会了解这些。
关于scala - def layout[A](x : A) = . .. Scala 中的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39858848/