2010-08-01 2 views
7

Я привык к динамическому набору символов, проверяя тип информации о объектно-не объектно-ориентированной структуре во время выполнения и бросая какую-то ошибку типа, т. Е. Если она уклоняется, как утка, ее утка. Существует ли другой тип динамического набора текста (пожалуйста, перейдите к деталям).Динамический ввод без утиной печати?

ответ

1

Нет, динамическая типизация - это когда значения имеют тип, но переменных нет, поэтому большинство проверок типов выполняется во время выполнения. Таким образом, в основном, если ценность идет или шарлатирует, как утка, это утка, иначе возникает ошибка. Утиная печать действительно описывает функцию динамического ввода, которая гарантирует, что она будет типичной (т. Е. Метод будет работать, только если переменная foo имеет соответствующий атрибут или может выполнить этот метод).

+4

Это неправильная информация. Он не проверяет тип, только тот тип, который может выполнять некоторый оператор X или имеет некоторый атрибут Y. Если вы вызываете, скажем, toString() для переменной, то если это объект и реализует метод toString() , то он будет вызываться, иначе вы получите сообщение об ошибке. Но многие из них могли бы выполнить это требование. – siride

+0

Хорошо, сделаю редактирование –

5

Да, абсолютно. Duck-typing - это идиома, в которой говорится, что тип значения в данный момент времени основан на полях и методах, которые он имеет прямо сейчас. Динамическое типирование только говорит о том, что типы связаны со значениями времени выполнения, а не со статическими переменными и параметрами. Между ними есть разница, и вы можете использовать последние без прежних.

Например, если вы запрограммировали на PHP и ограничились базовыми типами без использования OO, тогда вы использовали бы динамическую типизацию без использования утиного ввода.

+0

Не могли бы вы подробнее рассказать о своем примере? вы просто говорите, что проверка типов во время выполнения - это динамическая типизация, а проверка на основе проверки существования методов и свойств объектов называется утиным набором текста? т. е. вы могли бы сказать, что разница между этими двумя объектами связана с * объектами *? В обоих случаях (не-утиная динамическая и утиная типизация), похоже, что совместимость определенных операций (вызов метода, добавление и т. Д.) С входными значениями проверяется во время выполнения; это правильно? единственное отличие состоит в том, что утиная типизация относится к объектам, а динамическая типизация более общая, не так ли? – EOL

+1

@EOL: Да, проверка типов - это динамическая типизация (которая действительно должна называться «динамическая проверка», проверка наличия свойства - это утиная типизация. «Что касается объектов объектов», это немного расплывчато, чтобы сказать, что это правильно, но я думаю, что мы «Оба на той же странице. –

+0

Спасибо, теперь я вижу лучшее различие между ними. – EOL