我是Scala编程语言的新手,在学习here的讲稿时,我一直在尝试一些在我脑海中积累起来的东西。
我想我不能真正理解cons操作符是如何工作的,下面是我尝试过的一些方法:
我创建了一个伪随机数生成器,然后尝试创建一个包含一个随机值的列表:
scala> val gen = new java.util.Random
gen: java.util.Random = java.util.Random@1b27332
scala> gen nextInt 3 :: Nil
<console>:7: error: type mismatch;
found : List[Int]
required: Int
gen nextInt 3 :: Nil
^
但它试图将List(3)传递给nextnt方法。当我使用paratheses时,没有任何问题。
scala> (gen nextInt 3) :: Nil
res69: List[Int] = List(1)
我对执行顺序很好奇,所以我创建了一个函数来检查它
scala> def pr(i:Int):Int = { println(i); i }
pr: (i: Int)Int
scala> pr(1) :: pr(2) :: pr(3) :: Nil
1
2
3
res71: List[Int] = List(1, 2, 3)
如输出所示,执行顺序与出现顺序相同。然后我认为这可能是关于'nextInt‘函数,然后我尝试了以下内容:
scala> 1 + 2 :: Nil
res72: List[Int] = List(3)
它首先执行加法,然后执行cons。所以问题来了:gen nextInt 3 :: Nil
和1 + 2 :: Nil
之间有什么区别?
发布于 2010-07-06 03:37:01
这是关于优先级,而不是执行顺序。+
的优先级高于::
,因此a + b :: c
解析为(a + b) :: c
。但是,使用常规名称的中缀方法调用的优先级较低,因此a foo b c
将解析为a foo (b c)
。
查看this question查看按其在scala中的优先级排序的操作符列表。
https://stackoverflow.com/questions/3181745
复制相似问题