通常我会看一眼这个事实,只是接受它为“这就是轮子如何旋转”,但今天我不知道这是从哪里来的:为什么一个函数只有一个返回(参考)值?
为什么函数不能返回多个值很困难,还是不明智?是否由于对象而引起,以及您应该如何期望始终以对对象的引用形式返回数据包?
如果您将声明的函数视为合同,其中说明了如何调用函数,应采用的参数以及具有的返回值类型,那么我看不到只有一个返回值的逻辑,因为您可以应用反之亦然(因此为多个返回值创建合同)。
我所看到的基于逻辑的唯一原因是,如果一个函数返回不止一件事情,那么它也应该出于不止一个原因而操纵一件以上事情,这违背了一个功能只能做一件事情的理念。如果那件事是操纵一个对象并返回另一个对象,那将是有意义的,并且您可以使用操纵的对象返回一个参考值。
那么,为什么存在这个限制呢?
只要您有多个值x1
... xN
,您就可以轻而易举地得到一个元组(x1, ..., xN)
,该元组是单个(尽管是复合值)值。如果你没有元组你的语言,使用任何聚合类型(struct
,class
随意,数组,其他收藏品)。因此,从这个角度来看,返回“多个”值和返回单个值是完全等效的。
那只意味着您只需要一个,但是为什么要省略另一个呢?
首先,无论如何都需要聚合类型,因此要在同时具有两种或仅具有聚合类型之间进行选择。其次,如果一个函数可以返回“多个值”,那么您将面临一个语义难题:突然一个表达式不能求值(我们之前已经非常明确地定义了值),这就是这种新的不同类别的事物,称为“多个值”。现在,此结果的静态类型是什么?该程序可以做什么,不能做什么?在实施方面意味着什么?
当然,您可以人为地回答这些问题,但是任何明智的方法都将等于元组类型。无视,让你瞎一个非常有用的观点,并拒绝让他们一流的价值可能是更比说复杂,“这些都是元组类型,它们可以用这样的解构这样”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句