Comments 20
ну и ну, они что через рефлексию чтоли тащат эти методы в foreach? смысл только от этого какой непонятно.
Я бы не назвал это утиной типизацией. Во-первых, это вообще никак не связано с системой типов. Это просто некоторое соглашение касающееся семантики определённых языковых конструкций. Во-вторых, проверка типов делается статически, а не динамически, поэтому нельзя скажем написать foreach написать по объекту типа Object, собрать, а потом в рантайме передать в это место объект класса реализующего все нужные методы… Вообщем это не duck typing.
Сегодня немного людей понимают разницу между индукцией и дедукцией, а уж что такое синтаксический сахар вообще никто не знает. Правда, эти понятия за уши притянуты, но автору спасибо за попытку.
я вот думал стоит или нет называть это синтаксическим сахаром =)
Лично я вот кофе пью только с синтаксическим сахаром.: о)
en.wikipedia.org/wiki/Syntactic_sugar — в помошь народу :)
>почему она недоступна в статически типизированных языках
Ocaml
class Duck =
object
method Quack = «quack»
end;;
let doQuack obj =
obj#Quack ^ "!!!";;
let doQuackAndLaugh obj =
obj#Quack ^ " " ^ obj#Laugh ^ "!!!";;
let duck = new Duck;;
let a =doQuack duck;; (*OK*)
let b = doQuackAndLaugh duck;; (*Compile error*)
Ocaml
class Duck =
object
method Quack = «quack»
end;;
let doQuack obj =
obj#Quack ^ "!!!";;
let doQuackAndLaugh obj =
obj#Quack ^ " " ^ obj#Laugh ^ "!!!";;
let duck = new Duck;;
let a =doQuack duck;; (*OK*)
let b = doQuackAndLaugh duck;; (*Compile error*)
Интересно. Как-то реализовывал ненастоящую утиную типизацию на С# c помощью динамической генерации классов, но к сожалению сейчас показать не могу.
Зато вот тут моя статья о том, кому интересно, как подобного можно добиться в Java с помощью прокси-классов.
Зато вот тут моя статья о том, кому интересно, как подобного можно добиться в Java с помощью прокси-классов.
Пользуюсь LinFu когда надо, но если честно побаиваюсь поставлять такой код заказчикам — ведь потом тем кто поддерживает придется изучать лишнюю библиотеку. Хотя с другой стороны, dependency injection использую в коммерческом коде либерально, ибо «улучшает жизнь».
Sign up to leave a comment.
Утипизация в C#