Scala中:::(三重冒号)的用法是什么?

时间:2015-08-27 11:38:18

标签: scala

我是scala的新手。我遇到了一个概念,如下所示:

{ val x = a; b.:::(x) }   
  

在这个块中,仍然在b之前评估a,然后是结果   此评估作为操作数传递给b的::: method

以上陈述的含义是什么。
我尝试过如下:

var a = 10
var b = 20
我应该期待的结果应该是什么 有人可以举个例子......

提前致谢....

1 个答案:

答案 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运算符和关键字的含义。