我一直在想为什么Scala的设计能够省略点和括号.这让我很困惑.例如,
"hello".length() can be written as
"hello".length
Run Code Online (Sandbox Code Playgroud)
它造成了混乱:在C++编码器的角度来看,
"hello".length() is calling the object's length() function
"hello".length is calling the object's private/public variable.
Run Code Online (Sandbox Code Playgroud)
它们完全不同.
此外,有线连接读取没有点的代码,如下所示:
val myStr="hello world"
myStr substring(0, 3) toUpperCase() indexOf "h"
Run Code Online (Sandbox Code Playgroud)
看起来句子尚未完成.它也不节省空间,我们仍然需要使用空白""而不是".".
Scala设计师"发明"这种遗漏的目的是什么?我们鼓励使用这种风格吗?
在第一种情况下,是的.建议在没有括号的情况下使用没有参数且没有副作用的方法.如果有副作用,请使用括号.
这个想法是,无论length是方法还是直接访问属性都无关紧要.无论哪种方式,它只是给你一个长度,并且你正在做的事情没有根本的区别,只是得到一个值,并且无关紧要.按照惯例,括号表示存在一些副作用,例如打印到stdout或改变值.
对于你的第二个例子,是的,编写这样的代码会很奇怪,但是中缀符号可能非常有用.
例如,您可以编写1 + 2而不是1.+(2).我想你可以同意第一个是可取的.它还为编写漂亮的DSL提供了可能性,这些DSL不需要点和括号,这是目标之一.在典型的使用中,我会避免使用非符号(英语)方法.
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |