通常我会浏览这个事实并接受它“这就是轮子旋转的方式”,但今天我想知道它来自哪里:为什么一个函数只有一个返回(引用)值?
为什么不能,函数返回多个值会很困难还是不明智?是因为对象的原因吗?您应该如何期望数据包始终以对象引用的形式返回?
如果您将声明的函数视为契约,其中规定了如何调用函数、应采用哪些参数以及它具有哪种返回值类型,那么我看不到只有一个返回值背后的逻辑,因为您可以应用反过来也是同样的逻辑(从而创建多个返回值的合约)。
我能看到的基于逻辑的唯一原因是,如果一个函数返回超过 1 个东西,它也应该出于超过 1 个原因操作超过 1 个东西,这违背了函数应该做的哲学only一件事。如果那一件事是操纵一个对象并返回另一个对象,那么这是有意义的,您可以使用被操纵的对象返回一个引用值。
那么为什么会存在这种限制呢?
每当你有多个值时x1
... xN
,你很简单地拥有元组(x1, ..., xN)
这是一个单一的(尽管是复合的)值。如果您的语言中没有元组,请使用任何聚合类型 (struct
, class
、数组、其他集合)随意。所以从这个角度来看,返回“多个”值和返回单个值是完全等价的。
这只是意味着您只需要其中一个,但为什么要省略另一个呢?
首先,无论如何您都需要聚合类型,因此可以选择同时具有聚合类型或仅具有聚合类型。其次,如果一个函数可以返回“多个值”,那么您将面临一个语义难题:突然一个表达式无法求值(我们之前已经非常具体地定义过),这是一个新的、不同的类别,称为“多个值”。现在这个结果的静态类型是什么?该程序可以做什么,不能做什么?这在实施方面意味着什么?
您当然可以人为地回答这些问题,但任何明智的方法都只相当于元组类型。忽视这一点会让你对非常有用的观点视而不见,并且拒绝使它们成为一流的价值观可能是more比说“这些是元组类型,它们可以像这样构造和解构”更复杂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)