如何用类型推断的类型化语言处理未使用的返回值?

问题描述 投票:0回答:1

具有类型推断的强类型语言如何处理未使用的返回值(在不明显的预期类型的​​情况下?)?

发生这种情况的一个示例是,如果lambda意外返回了函数本身,而不是执行结果。例如,在python中(显然,没有输入,所以这只是一个例子),可能会写错:

list(map(lambda item: item.some_method, some_collection))

而不是

list(map(lambda item: item.some_method(), some_collection))

some_method方法不返回任何内容(可能只是更新item的内部结构,或具有其他副作用)。开发人员期望结果列表为[None, ...],而实际上为[item_0.some_method, ...]

type-safety type-systems
1个回答
0
投票

在类型化的编程语言中,item.some_method将具有函数类型。如果不接受任何参数且不返回任何值,则它将具有() -> ()类型,其中()unit type,表示一个微不足道的值。如果调用item.some_method(这意味着隐式传递单位类型的唯一值),则会得到类型为()的值,这也是微不足道的。

这里,item.some_methoditem.some_method()具有不同的类型(分别为() -> ()()),因此您将无法在强类型编程语言中使用一个代替另一个。 (在map示例中,这有点微妙,因为您隐式地采用了A类型的值,其中集合的范围超过了A类型的值,但忽略了它。同样的原理适用,但是)

我建议您使用强类型语言,这很快就会变得很明显。

© www.soinside.com 2019 - 2024. All rights reserved.