Простое объяснение (без кода)
Обсуждение семантики вопроса довольно нюансировано (и очень академично), но вот общая идея:
Duck Typing
(«Если он ходит как утка и крякает как утка, значит, это утка».) - ДА!но что это значит ??! Это лучше всего иллюстрируется на примере:
Пример: языки с динамической типизацией
Представьте, что у меня есть волшебная палочка.У него есть особые полномочия.Если я взмахну палочкой и скажу «Езжай!» машине, то тогда она едет!
Работает ли она на других вещах?Не уверен: поэтому я пробую это на грузовике.Ух ты - это тоже диски!Затем я пробую это на самолетах, поездах и 1 Вудсе (это тип гольф-клуба, который люди используют, чтобы «водить» мяч для гольфа). Они все ездят!
Но сработает ли, скажем, чашка?Ошибка: KAAAA-BOOOOOOM!это не сработало так хорошо.====> Чашки не могут водить!Дух!?
Это в основном концепция печатания утки.Это система "попробуй, прежде чем купить" .Если это работает, все хорошо.Но если это не удастся, ну, это взорвется вам в лицо.
Другими словами, нас интересует, что объект может делать , а не с , как этот объектis .
Пример: языки со статической типизацией
Если нас интересует , каким на самом деле был объект , тогда наш магический трюкработают только на заранее заданных, авторизованных типах - в этом случае автомобили, но будут выходить из строя на других объектах, которые могут ездить : грузовиках, мопедах, тук-туках и т. д. Это не будет работать на грузовиках, потому что наша магияпалочка ожидает, что она будет работать только на автомобилях .
Другими словами, в этом сценарии волшебная палочка очень внимательно смотрит на то, что объект является (это автомобиль?), А не на то, что объект может сделать (например, могут ли автомобили, грузовики и т. д.).
Единственный способ заставить грузовик ехать, если вы каким-то образом можете заставить волшебную палочку ожидать, что оба грузовых автомобиля будут и (возможно, путем "реализации общего интерфейса").Если вы не знаете, что это значит, просто проигнорируйте это на данный момент.
Краткое описание: Выдача ключа
Что важно при наборе утки, так это объектможет на самом деле делать, , а не то, что объект является .