我是scala的新手。我遇到了一个概念,如下所示:
{ val x = a; b.:::(x) }
在这个块中,仍然在b之前评估a,然后是结果 此评估作为操作数传递给b的::: method
以上陈述的含义是什么。
我尝试过如下:
var a = 10
var b = 20
我应该期待的结果应该是什么
有人可以举个例子......
提前致谢....
答案 0 :(得分:6)
:::
运算符在List
trait上定义,并连接两个列表。在Int
中使用它就像你的例子中那样(var a=10
)不应该起作用(除非你自己定义这样的算子)。
以下是列表的工作原理:
val a = List(1, 2);
val b = List(3, 4);
val c1 = a ::: b // List(1, 2, 3, 4)
val c2 = a.:::(b) // List(3, 4, 1, 2)
使用中缀语法(:::
)和方法调用语法(c1
)调用c2
的方式与列表连接的顺序不同(请参阅Jörg的注释)。
语句“a仍在b之前评估”表示在将a
作为参数传递给方法调用之前对其进行评估。除非方法使用call by name,否则在调用之前会对其参数进行求值,就像在Java中一样。
This可以为您提供一些提示,了解如何搜索Scala运算符和关键字的含义。