我習慣於在運行時動態輸入意義檢查對象/非面向對象結構的類型信息,並拋出某種類型的錯誤,即如果它像鴨子那樣嘎嘎叫鴨子。是否有不同類型的動態類型(請詳細說明)。動態打字沒有鴨子打字?
回答
不,動態類型是當值有類型但變量沒有時,所以大多數類型檢查是在運行時完成的。所以,基本上,如果價值像鴨子一樣散步或呱呱叫,那就是一隻鴨子,否則就會引發錯誤。 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