Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对scala官方文档页面中的几行代码感到困惑_Scala - Fatal编程技术网

对scala官方文档页面中的几行代码感到困惑

对scala官方文档页面中的几行代码感到困惑,scala,Scala,在本文档页面中: 我看到了以下示例代码: class EdgeImpl(origin: Node, dest: Node) { def from = origin def to = dest } 我觉得奇怪的是,“def”通常应该用来定义一个方法,但是为什么在这里“from”和“to”被分配了“Node”对象呢 有人能确认这是文档页面中的错误还是我的理解有误吗?from和to是类EdgeImpl中的方法。它们都有零个参数,返回类型为节点本身未“分配”源代码的值。它只是一个总是返

在本文档页面中:

我看到了以下示例代码:

class EdgeImpl(origin: Node, dest: Node) {
    def from = origin
    def to = dest
}
我觉得奇怪的是,“def”通常应该用来定义一个方法,但是为什么在这里“from”和“to”被分配了“Node”对象呢


有人能确认这是文档页面中的错误还是我的理解有误吗?

from
to
是类
EdgeImpl
中的方法。它们都有零个参数,返回类型为
节点
<源代码>本身未“分配”源代码的值。它只是一个总是返回
origin
的方法


如果没有对它进行太多的解读,它可能只是一个
val
,但是一个返回常量值的方法是完全有效的。

经过一些调查,我认为它们应该是无参数的方法

无参数函数是不带参数的函数,它 定义时没有任何空括号。无参数调用 函数不能提供括号。这支持统一访问 原理,使def可以在无需更改的情况下更改为val 需要更改客户端代码

无参数方法是作为 类、特征或单一对象


我不认为这是页面上的错误:

考虑以下这一行:

def from = origin
该方法的返回类型是什么?它是
节点
-那么,这告诉了你什么?它只是意味着它是类
EdgeImpl
中的一个getter方法。这是Scala中编写getter的一个非常常见的约定


您可能会争辩说,发现getter方法被“分配”给某个对象是令人困惑的,它应该明确地说它是一个带有空
()
的getter方法。简单的规则是:在没有副作用发生的情况下,使用无参数方法是非常好的。但是如果不需要param方法(带有
()
)的方法),它通常用于可能产生副作用的地方,比如写入文件或保持可变状态等等

scala中的方法定义如下所示

def methodName(param1: ParamType, param2: ParamType): ReturnType = { methodBody; return foo }
现在,请记住,返回类型归属和关键字
return
是可选的,大括号(如果整个方法由一条语句组成)和参数列表(如果没有参数)也是可选的,这有帮助吗

有java背景、厌恶新奇事物的人可以编写如下函数

def from(): Node = { return origin; }

这(几乎)相当,但不太地道,更难阅读

它们都是只返回
origin
dest