我正在sum
为一种玩具语言定义一个可变参数函数。对我来说,允许在没有参数和 return 的情况下调用它似乎很自然0
,但真正的语言(及其实现)彼此之间存在分歧。
是否存在返回零比抛出异常更不正确的用例?
我正在sum
为一种玩具语言定义一个可变参数函数。对我来说,允许在没有参数和 return 的情况下调用它似乎很自然0
,但真正的语言(及其实现)彼此之间存在分歧。
是否存在返回零比抛出异常更不正确的用例?
从数学上讲,空和(没有数字的总和)被定义为零。从数学上讲,返回零似乎是正确的选择。在这种情况下抛出异常可能会使函数的使用复杂化,因为您必须确保使用 try/catch 保护每个调用,以防您以某种方式提供零参数。
希望这可以帮助!
在一种情况下,您可能不希望它返回零:假设您的语言是动态类型的并且允许+
对非数字类型进行操作(例如,它可能像在 Python 中那样连接字符串)。那么一个空的总和对于它在理论上是什么类型的求和是模棱两可的:你可能希望结果是数字的 0,字符串的 "",列表的 [] 等等。
如果您的语言是这样的,那么您可能会选择 (1) 无论如何都返回 0 并接受除数字之外sum(things)+other_thing
不等于sum(things together with other_thing)
的值,(2) 抛出异常,(3) 返回一些特殊值,添加到时行为类似于 0数字,例如添加到字符串时的“”等,或者(4)无论如何都返回(比如说)0并说0+“”等于“”或类似的东西。如果语言有任何不是玩具的任何危险,请不要执行#4。
哦,还有另一个相关案例:假设您的语言是静态类型的,但具有强大的类型推断机制。然后它可能会区分不求数字和不求字符串,并在两种情况下返回不同的东西。(但是你需要一个相当复杂的类型系统来完成所有这些工作,我猜你不会为玩具语言而烦恼。)