首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >理解Scala中的infix方法调用和cons运算符(::)

理解Scala中的infix方法调用和cons运算符(::)
EN

Stack Overflow用户
提问于 2010-07-06 03:26:52
回答 1查看 15.2K关注 0票数 21

我是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 :: Nil1 + 2 :: Nil之间有什么区别?

EN

回答 1

Stack Overflow用户

发布于 2010-07-06 03:37:01

这是关于优先级,而不是执行顺序。+的优先级高于::,因此a + b :: c解析为(a + b) :: c。但是,使用常规名称的中缀方法调用的优先级较低,因此a foo b c将解析为a foo (b c)

查看this question查看按其在scala中的优先级排序的操作符列表。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3181745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档