1 :: 2 :: Nil与(1 ::(2 :: Nil))之间的区别?

时间:2018-03-01 05:20:45

标签: scala

在我一直使用的Scala教程中,我一直看到以这种方式构建的列表:

(1 :: (2 :: Nil))

这与非括号版本有区别吗?

1 :: 2 :: Nil

2 个答案:

答案 0 :(得分:6)

他们是一样的。可以添加括号来说明操作顺序,但它们不会改变任何内容。事实上,它们毫无意义,因为没有其他操作顺序是可能的。在这两种情况下,中缀(即无点)符号都是脱糖的。

Nil.::(2).::(1)

“怎么样,”你说?请记住,以冒号:结尾的方法名称在使用中缀表示法时会反转class.method(argument)顺序。

答案 1 :(得分:3)

Scala编译器

编译时,两者都相同
(1 :: (2 :: Nil))
//res0: List[Int] = List(1, 2)

并且

1 :: 2 :: Nil
//res1: List[Int] = List(1, 2)

使用的括号仅用于显示列表中的前置分组和顺序,Nil是最后一个元素。