Какая функция языка Python называется при проектировании языков программирования? Это утка печатает?
«Здесь может работать любой объект с членом с определенным именем (или подписью)» - это утиный ввод. Я не думаю, что есть более конкретный термин для «любой объект с членом с определенным именем (или подписью), может работать для этой языковой функции», если это то, о чем вы спрашивали.
Как работает языковая функция внизу?
Я не понимаю вопроса. Если языковая функция означает, что она вызывает метод с определенным именем, она вызывает метод с этим именем. Вот и все.
В C ++, C # и Java правильно ли, что класс дескриптора и класс итератора были бы определены как подклассы некоторых конкретных классов?
Я не знаю ничего похожего на дескриптор ни на одном из этих языков, и я не думаю, что имеет смысл размышлять о том, как бы он выглядел, если бы существовал.
Что касается итераторов, у каждого из этих языков есть цикл foreach, поэтому вы можете посмотреть на это:
В C ++ цикл for
на основе диапазона работает с любым типом, который имеет члены экземпляра begin
и end
или для которого существуют функции begin
и end
. Возвращаемый тип должен поддерживать операторы ++
, !=
и *
.
В C # цикл foreach
работает с любым типом, имеющим метод экземпляра GetEnumerator()
, который возвращает тип с методом MoveNext()
и свойством Current
. Также есть интерфейс IEnumerable<T>
, описывающий ту же форму. Перечислимые типы обычно реализуют этот интерфейс, но это не обязательно.
В Java расширенный цикл for
работает с любым типом, реализующим Iterable
.
Таким образом, нигде нет подклассов (C # и Java различают реализацию интерфейса и наследование от базового класса). Java требует от вас реализации интерфейса. C # использует утиную типизацию, но также позволяет реализовать интерфейс. C ++ использует утиную типизацию, интерфейса или базового класса нет вообще.
Обратите внимание, что в зависимости от языка решение об использовании утиной печати для определенной языковой функции может быть сложным. В качестве крайнего примера, одна функция C # (инициализаторы коллекций) требует реализации определенного интерфейса (IEnumerable
), а также наличия метода с определенным именем (Add
). Таким образом, эта функция частично набрана с утиным типом.
person
svick
schedule
17.09.2017
__next__
. Это неверно или, по крайней мере, плохо сформулировано. Итератор - это объект, у которого есть функция__next__
. Класс итератора не имеет значения; это утиная печать. - person Aran-Fey   schedule 17.09.2017