一只甜甜圈
一系列报价,可以深入了解各种情况......就个人而言,我认为规范中还有更多内容。我肯定一定有,我只是不寻找合适的词......然而,有几个来源,我已经收集了它们,但没有真正完整/全面/可理解的/向我解释上述问题......:“如果一个方法体有一个以上的表达式,你必须用花括号{...}包围它。如果方法体只有一个表达式,你可以省略括号。”从Scala编程的第2章“Type Less,Do More”:“上层方法的主体来自等号'='。为什么等号?为什么不只是花括号{...},就像在Java中一样?因为分号,函数返回类型,方法参数列表,甚至花括号有时省略,使用等号可以防止几种可能的解析歧义。使用等号也提醒我们,甚至函数都是Scala中的值,这与Scala对函数式编程的支持是一致的,在第8章“函数式编程”中有更详细的描述。斯卡拉“。从第1章“0至60:介绍斯卡拉”的编程斯卡拉:“没有参数的函数可以在没有括号的情况下声明,在这种情况下,它必须在没有括号的情况下被调用。这提供了对统一访问原则的支持,这样调用者不知道符号是变量还是函数没有参数。如果函数体返回一个值(即返回类型不是Unit),则函数体前面带有“=”,但当类型为Unit时,返回类型和“=”可以省略(即它看起来像一个过程而不是一个功能)。身体周围的大括号不是必需的(如果身体是单个表情); 更确切地说,函数体只是一个表达式,任何包含多个部分的表达式都必须用括号括起来(一个部分的表达式可以选择用括号括起来)。““可以在没有点和圆括号的情况下调用具有零个或一个参数的函数。但是任何表达式都可以在其周围加上括号,因此您可以省略该点并仍然使用括号。由于您可以在任何可以使用括号的地方使用大括号,因此您可以省略点并放入大括号,其中可以包含多个语句。没有参数的函数可以在没有括号的情况下调用。例如,String上的length()函数可以调用为“abc”.length而不是“abc”.length()。如果函数是没有括号定义的Scala函数,则必须在没有括号的情况下调用该函数。按照惯例,使用括号调用没有带副作用的参数的函数,例如println; 那些没有副作用的人被称为没有括号。“来自博客文章Scala Syntax Primer:“过程定义是一个函数定义,其中省略了结果类型和等号;它的定义表达式必须是一个块。例如,def f(ps){stats}等价于def f(ps):Unit = {stats }。例4.6.3这是一个名为write的过程的声明和定义:trait Writer {
def write(str: String)}object Terminal extends Writer {
def write(str: String) { System.out.println(str) }}以上代码隐式完成以下代码:trait Writer {
def write(str: String): Unit}object Terminal extends Writer {
def write(str: String): Unit = { System.out.println(str) }}"从语言规范:“对于只采用单个参数的方法,Scala允许开发人员用空格替换。并省略括号,启用插入运算符示例中显示的运算符语法。此语法用于Scala API中的其他位置,例如作为构建Range实例:val firstTen:Range = 0 to 9在这里,(Int)是一个在类中声明的vanilla方法(这里实际上有一些隐式类型转换,但是你得到漂移)。“来自Scala for Java Refugees第6部分:克服Java:“现在,当你尝试”m 0“时,Scala将其作为一元算子丢弃,理由是它不是有效的(〜,!, - 和+)。它发现”m“是一个有效的对象 - 它是一个函数,而不是一个方法,所有函数都是对象。由于“0”不是有效的Scala标识符,因此它既不能是中缀也不能是后缀运算符。因此,Scala抱怨它预期“;” - 它将两个(几乎)有效的表达式分开:“m”和“0”。如果你插入它,那么它会抱怨m需要一个参数,或者,如果没有,那么“_”将它变成一个部分应用的函数。““我相信只有当您在左侧有一个显式对象时,运算符语法风格才有效。语法旨在让您以自然的方式表达”操作数运算符操作数“样式操作。”我可以在Scala中省略哪些字符?但令我困惑的是这句话:“需要有一个对象来接收方法调用。例如,你不能做”println“Hello World!”“因为println需要一个对象接收者。你可以做“Console println”Hello World!“”满足需要。“因为据我所看到的,是一个对象接收呼叫...
0
0