没有鸭子打字的动态打字?

时间:2010-08-01 14:02:16

标签: duck-typing dynamic-typing

我习惯于动态类型,这意味着在运行时检查对象/非面向对象结构的类型信息并抛出某种类型错误,即如果它像鸭子那样呱呱叫它。是否有不同类型的动态类型(请详细说明)。

2 个答案:

答案 0 :(得分:5)

是的,绝对的。 Duck-typing是一种习惯用语,它表示此时此值的类型基于它现在拥有的字段和方法。动态类型只是表示类型与运行时值相关联,而不是与静态变量和参数相关联。两者之间存在差异,您可以在没有前者的情况下使用后者。

例如,如果您使用PHP编程并且在不使用OO的情况下限制自己使用基本类型,那么您将使用动态类型而不使用duck-typing。

答案 1 :(得分:1)

不,动态类型是当值具有类型但变量不具有类型时,因此大多数类型检查在运行时完成。所以,基本上,如果值像鸭子一样走路或嘎嘎叫,那就是鸭子,否则就会抛出错误。 Duck打字实际上只是描述了动态类型的一个特性,它确保它是类型安全的(即只有当变量foo'具有正确的属性或者可以执行该方法时,方法才会运行。)