我习惯于在运行时动态输入意义检查对象/非面向对象结构的类型信息,并抛出某种类型的错误,即如果它像鸭子那样嘎嘎叫鸭子。是否有不同类型的动态类型(请详细说明)。动态打字没有鸭子打字?
回答
不,动态类型是当值有类型但变量没有时,所以大多数类型检查是在运行时完成的。所以,基本上,如果价值像鸭子一样散步或呱呱叫,那就是一只鸭子,否则就会引发错误。 Duck打字实际上只是描述了动态类型的一个特性,它确保它是类型安全的(即只有在变量foo
'具有正确的属性或可以执行该方法时,方法才会运行)。
是的,绝对。鸭子打字是一种习惯用语,它表示此时此刻的价值类型是基于它现在拥有的领域和方法。动态类型只是说类型与运行时间值相关,而不是静态变量和参数。两者之间有区别,你可以在没有前者的情况下使用后者。例如,如果您使用PHP进行编程并将自己的基本类型限制为不使用OO,那么您将使用动态输入而不使用鸭子输入。
你能否详细说明你的例子?你只是说在运行时检查类型是动态类型,而基于测试方法和属性的对象检查被称为鸭子打字?即,你会说,两者之间的差异与*对象*有关吗?在这两种情况下(非鸭动态和鸭打字),它看起来像运行时检查某些操作(方法调用,添加等)与输入值的兼容性;是对的吗?唯一的区别是鸭子打字涉及对象,而动态打字更为普遍,对吗? – EOL 2011-01-07 09:53:34
@EOL:是的,类型检查是动态类型的(应该真的叫做'动态检查',检查属性存在是鸭子打字。'关注对象'的东西有点模糊,说它是正确的,但我认为我们'都在同一页上。 – 2011-01-08 01:13:40
谢谢!我现在看到两者之间更好的区别。 – EOL 2011-01-08 22:31:56
- 1. 静态鸭打字VS CRTP
- 2. “鸭子打字”的词源?
- 3. TypeScript鸭子打字,想要强力静态打字
- 4. 所有动态语言都支持鸭子打字吗?
- 5. 鸭子打字numpy浮动类型
- 6. 鸭子打字:使用鸭子打字将Ruby代码翻译成Javascript
- 7. 鸭打字ColdFusion的
- 8. 动态语言界面和鸭子打字
- 9. 模块“鸭子打字”陷阱?
- 10. 抽象基类与鸭子打字
- 11. 最新的C#鸭子打字库
- 12. 鸭子打字和通用编程
- 13. 自引用鸭打字
- 14. 鸭打字和异物
- 15. C#4.0动态对象是否有一些用于鸭子打字的设施?
- 16. PHP动态鸭打字无需评估和演示
- 17. C++模板和鸭子打字有什么关系?
- 18. C++多继承和鸭打字
- 19. 鸭打字和(JAVA)的接口概念
- 20. 斯卡拉鸭打字模式匹配
- 21. 诊断错误时鸭打字失败
- 22. 应用鸭打字在纯C
- 23. Redux字段没有打字
- 24. 任何使C++成为鸭子打字的方法
- 25. Powershell中的索引迭代表的鸭子打字
- 26. Grails:鸭子打字和多对多的集合类
- 27. 我可以用鸭子打字改进这种方法吗?
- 28. 不理解类型检查的错误形式 - 鸭子打字
- 29. 鸭子打字:你会如何对待这种情况
- 30. Python鸭子打字的pygame MVC事件处理
这是不正确的。它不检查类型,只是该类型可以执行某个运算符X或具有某个属性Y.如果对变量调用toString(),那么如果它是一个对象并且它实现了toString()方法,那么它将被调用,否则,你会得到一个错误。但是很多类型都可以满足这个要求。 – siride 2010-08-01 14:57:16
好点,我会编辑 – 2010-08-01 15:22:36