为了账号安全,请及时绑定邮箱和手机立即绑定

什么时候可以省略括号,点,大括号,=(函数)等的精确规则?

什么时候可以省略括号,点,大括号,=(函数)等的精确规则?

潇湘沐 2019-07-29 15:39:38
什么时候可以省略括号,点,大括号,=(函数)等的精确规则?什么时候可以省略(省略)括号,圆点,大括号,=(函数)等的精确规则?例如,(service.findAllPresentations.get.first.votes.size) must be equalTo(2).service 是我的对象def findAllPresentations: Option[List[Presentation]]votes 回报 List[Vote]必须和是有规格的两种功能为什么我不能去:(service findAllPresentations get first votes size) must be equalTo(2)?编译器错误是:“类型为Option [List [com.sharca.Presentation]]的RestServicesSpecTest.this.service.findAllPresentations不带参数”为什么它认为我试图传递一个参数?为什么我必须为每个方法调用使用点?为什么必须(service.findAllPresentations get first votes size)相等Too(2)导致:“没找到:价值第一”然而,“必须等于2” (service.findAllPresentations.get.first.votes.size)必须等于2,即方法链是否正常? - 对象链链链接。我查看了Scala的书籍和网站,无法找到全面的解释。事实上,正如Rob H在Stack Overflow问题中解释的那样,我可以在Scala中省略哪些字符?,这是省略'。'的唯一有效用例。是用于“操作数运算符操作数”样式操作,而不是用于方法链接?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

你似乎偶然发现了答案。无论如何,我会尽力说清楚。

使用前缀,中缀和后缀表示法时可省略点 - 所谓的运算符表示法。使用运算符表示法时,只有这样,如果传递给方法的参数少于两个,则可以省略括号。

现在,运算符表示法是方法调用的表示,这意味着它不能在没有被调用的对象的情况下使用。

我将简要介绍一下这些符号。

字首:

只有~!+并且-可以在前缀符号使用。这是当你写你所使用的符号!flagval liability = -debt

中缀:

这是方法出现在对象和它的参数之间的符号。算术运算符都适合这里。

后缀(也是后缀):

当方法跟随对象并且不接收任何参数时,使用该表示法。例如,您可以编写list tail,这是后缀表示法。

只要没有方法,就可以毫无问题地链接中缀符号。例如,我喜欢使用以下样式:

(list
 filter (...)
 map (...)
 mkString ", ")

这与以下内容相同:

list filter (...) map (...) mkString ", "

现在,为什么我在这里使用括号,如果filter和map只使用一个参数?这是因为我将匿名函数传递给他们。我不能将匿名函数定义与中缀样式混合,因为我需要一个边界来结束我的匿名函数。此外,匿名函数的参数定义可能被解释为中缀方法的最后一个参数。

您可以使用具有多个参数的中缀:

string substring (start, end) map (_ toInt) mkString ("<", ", ", ">")

使用中缀表示法很难使用Curried函数。折叠功能就是一个明显的例子:

(0 /: list) ((cnt, string) => cnt + string.size)(list foldLeft 0) ((cnt, string) => cnt + string.size)

您需要在中缀调用之外使用括号。我不确定这里的确切规则。

现在,我们来谈谈postfix。Postfix可能很难使用,因为除了表达式的结尾之外,它永远不会被使用。例如,您无法执行以下操作:

 list tail map (...)

因为尾部没有出现在表达式的末尾。你不能这样做:

 list tail length

您可以使用括号来标记表达式的结尾来使用中缀表示法:

 (list tail) map (...)
 (list tail) length

请注意,不建议使用后缀表示法,因为它可能不安全

我希望这已经消除了所有的疑虑。如果没有,只需发表评论,我就会看到我可以做些什么来改进它。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 1167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信