【发布时间】:2011-03-23 21:01:42
【问题描述】:
我习惯于动态类型,这意味着在运行时检查对象/非面向对象结构的类型信息并抛出某种类型错误,即如果它像鸭子一样嘎嘎叫,那就是鸭子。是否有不同类型的动态类型(请详述)。
【问题讨论】:
标签: duck-typing dynamic-typing
我习惯于动态类型,这意味着在运行时检查对象/非面向对象结构的类型信息并抛出某种类型错误,即如果它像鸭子一样嘎嘎叫,那就是鸭子。是否有不同类型的动态类型(请详述)。
【问题讨论】:
标签: duck-typing dynamic-typing
是的,当然。 Duck-typing 是一个习惯用法,它表示此时值的类型基于它现在拥有的字段和方法。动态类型只是说类型与运行时值相关联,而不是与静态变量和参数相关联。两者是有区别的,可以用后者不用前者。
例如,如果您使用 PHP 编程并限制自己使用基本类型而不使用 OO,那么您将使用动态类型而不使用鸭子类型。
【讨论】:
不,动态类型是指值具有类型但变量不具有类型,因此大多数类型检查是在运行时完成的。所以,基本上,如果值像鸭子一样走路或嘎嘎叫,它就是鸭子,否则会抛出错误。鸭子类型实际上只是描述了动态类型的一个特性,它确保它是类型安全的(即一个方法只有在变量foo'具有正确的属性或可以执行该方法时才会运行)。
【讨论】: