Minoru
29.07.2012 11:39 micropost
Не знаю, под каким тегом спрашивать такие вопросы, так что поставил названия языков, пользователи которых могут знать ответ.
Читаю про structural и nominal typing, возникла пара вопросов:
• в примерах структурной типизации[1] мы определяем функцию, которой от параметра нужен лишь метод set_x. Это разве не duck typing получается?
• правильно ли я понимаю, что nominal typing — это просто алиасы для типов (newtype в Haskell или typedef в C)?
1. https://en.wikipedia.org/wiki/Structural...
если у тебя один метод и огрничение на него же, то разницы не будет. если их больше, то duck typing может часть проигнорировать, structural typing — нет
test
1 — структурная типизация в реальных применениях и называется duck typing. То есть, это оно и есть, почти по определению. Но есть ещё нюансы (в том числе, упомянутые @jtootf).
2 — nominal typing — это не просто алиасы! Это типизация, запрещающая использовать имя типа t1 там, где нужен тип T2, и наоборот, при условии, что имя типа t1 привязано к типу T2. Про newtype не знаю, но сишный typedef не даёт nominal typing, это просто алиас типа.
Олсо, ты пидор. Поэтому ответ @gds’а до тебя не дошел и пришлось отправлять через меня.
Я тебя не совсем понял. «Часть проигнорировать» — это забить на отсутствующие методы и упасть в рантайме?
зачем упасть? если в функции нужен объект point, у которого мы используем только метод get_x, то метода get_y у него может и не быть. в случае структурной типизации мы оттайпчекаем только объект, удовлетворяющий полной структурной спецификации на объект point, т.е. любой объект, имеющий оба метода
Если функции нужен объект point — это уже не структурная типизация, т.к. мы начинаем различать объекты по именам, а не по структуре. Функция set_to_10 содержит в типе только упоминание о get_x — Википедия ошибается, называя это структурной типизацией?
буквоедство — это принципиальная позиция? замени "объект point" на "объект, удовлетворяющий структурно классу point"
Пока писал комментарий-ответ с вопросами, перечитал десяток раз вот это:
> Nominal typing means that two variables are type-compatible if and only if their declarations name the same type. For example, in C, two struct types with different names are never considered compatible, even if they have identical field declarations.
Теперь я всё понимаю. Ещё раз спасибо!
Нет, я просто от тебя ожидаю только строгих, безукоризненно точных формулировок. Извини.
И всё-таки, что с примером в Википедии?
Как же я не люблю, когда собеседник просто бросает разговор…
напиши jtootfу в приватик, делов-то.
Полагаю, если он не отвечает сюда, то у него есть на то причины — например, мои вопросы вызывают facepalm и желание убить человеков (хотя бы некоторых, конкретных). Навязываться я не собираюсь, это однозначно.
оный собеседник обязан всё воскресенье просидеть у интернетов? что касается вопроса, то мне кажется, что пример с set_to_10 не удовлетворяет приведённому определению (зато удовлетворяет определению duck typing'а). то, что other methods are irrelevant не согласуется с for each feature within the second element's type
Отнюдь. Но у меня такое впечатление, что ты не впервые попросту бросаешь разговор, так до конца ничего и не объяснив.
За ответ — спасибо.
с чужими впечатлениями я, увы, ничего поделать не могу