gpt4 book ai didi

syntax - 何时可以省略括号、点、大括号、=(函数)等,具体规则是什么?

转载 作者:行者123 更新时间:2023-12-03 04:48:40 26 4
gpt4 key购买 nike

何时可以省略(省略)括号、点、大括号、=(函数)等,具体规则是什么?

例如,

(service.findAllPresentations.get.first.votes.size) must be equalTo(2).
  • 服务是我的对象
  • def findAllPresentations: 选项[列表[演示文稿]]
  • votes 返回List[Vote]
  • mustbe 都是规范的函数

为什么我不能去:

(service findAllPresentations get first votes size) must be equalTo(2)

编译器错误是:

"RestServicesSpecTest.this.service.findAllPresentations of type Option[List[com.sharca.Presentation]] does not take parameters"

为什么它认为我正在尝试传递参数?为什么每个方法调用都必须使用点?

为什么必须(service.findAllPresentations获取第一票大小)等于(2)结果:

"not found: value first"

但是,“必须等于 2”(service.findAllPresentations.get.first.votes.size) 必须等于 2,也就是说,方法链接工作正常吗? - 对象链链参数。

我浏览了 Scala 书籍和网站,但找不到全面的解释。

事实上,正如 Rob H 在 Stack Overflow 问题中所解释的那样 Which characters can I omit in Scala? ,这是省略“.”的唯一有效用例。用于“操作数运算符操作数”样式操作,而不是用于方法链接?

最佳答案

你似乎偶然发现了答案。不管怎样,我会尽力把话说清楚。

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

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

我将简要介绍这些符号。

前缀:

前缀表示法中只能使用~!+-。这是您在编写 !flagval Liability = -debt 时使用的表示法。

中缀:

这是方法出现在对象及其参数之间的表示法。算术运算符都适合这里。

后缀(也是后缀):

当方法遵循对象且不接收参数时,将使用该表示法。例如,您可以编写 list tail,这就是后缀表示法。

只要没有方法被柯里化(Currying),你就可以毫无问题地链接中缀表示法调用。例如,我喜欢使用以下样式:

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

这与以下内容相同:

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

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

您可以将中缀与多个参数一起使用:

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

柯里化(Currying)函数很难与中缀表示法一起使用。折叠功能就是一个明显的例子:

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

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

现在,我们来谈谈后缀。 Postfix 可能很难使用,因为它除了表达式末尾之外不能在任何地方使用。例如,您不能执行以下操作:

 list tail map (...)

因为tail不会出现在表达式的末尾。您也不能这样做:

 list tail length

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

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

请注意,不鼓励使用后缀表示法,因为 it may be unsafe .

我希望这已经消除了所有疑虑。如果没有,请发表评论,我会看看我能做些什么来改进它。

关于syntax - 何时可以省略括号、点、大括号、=(函数)等,具体规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1181533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com