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

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

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

这是在未类型化的Python中发生这种情况的示例,当然它没有被捕获:

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

这里是item.some_method,因其副作用而被调用,因此正确的行是:

list(map(lambda item: item.some_method(), some_collection))
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.