scala - def layout[A](x : A) = . .. Scala 中的语法

标签 scala

我是 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/

相关文章:

java - Apache Camel Web 控制台的 scalate servlet 在 WebLogic 中失败

scala - 填充 Spark 数据框列中的缺失日期

scala - 导入 sbt 项目时出错,服务器访问错误, Unresolved 依赖项

scala - 如何定义具有未绑定(bind)类型参数的成员的案例类?

scala - 隐式添加对象方法

scala - Scala Traits 中的冲突字段

java - 获取高达 100 纳秒的基于时间的 uuid

java - ConfigFactory ParseFile 通过 Java 系统属性的变量替换进行解析

scala - 如何合并SPARK数据框创建的文件夹中的所有零件文件并重命名为scala中的文件夹名称

android - Scala Actor 线程控制