Реклама
Комментарии 20
Есть такой замечательный язык — F#.
Там есть некое подобие ducktyping'а, но проверки соответствия должны быть произведены на этапе компиляции.
Здесь все тоже в compile-time проверяется — и так оно и будет во всех CLR-языках до тех пор, пока DLR официально не выйдет.
В F# можно написать свои функции, поддерживающие ducktyping.
Но из C#, вероятно, ими нельзя будет пользоваться без извращений.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
ну и ну, они что через рефлексию чтоли тащат эти методы в foreach? смысл только от этого какой непонятно.
Я бы не назвал это утиной типизацией. Во-первых, это вообще никак не связано с системой типов. Это просто некоторое соглашение касающееся семантики определённых языковых конструкций. Во-вторых, проверка типов делается статически, а не динамически, поэтому нельзя скажем написать foreach написать по объекту типа Object, собрать, а потом в рантайме передать в это место объект класса реализующего все нужные методы… Вообщем это не duck typing.
не обязан, но он должен хотя бы выглядеть как duck typing: т. е. мы не указываем конкретные типы, а просто вызываем какие-то методы, функции и т. д.

Сегодня немного людей понимают разницу между индукцией и дедукцией, а уж что такое синтаксический сахар вообще никто не знает. Правда, эти понятия за уши притянуты, но автору спасибо за попытку.
я вот думал стоит или нет называть это синтаксическим сахаром =)
Лично я вот кофе пью только с синтаксическим сахаром.: о)
>почему она недоступна в статически типизированных языках

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*)
кстати, F# — наследник Ocaml
к несчастью в этом не совместимый
Интересно. Как-то реализовывал ненастоящую утиную типизацию на С# c помощью динамической генерации классов, но к сожалению сейчас показать не могу.
Зато вот тут моя статья о том, кому интересно, как подобного можно добиться в Java с помощью прокси-классов.
Пользуюсь LinFu когда надо, но если честно побаиваюсь поставлять такой код заказчикам — ведь потом тем кто поддерживает придется изучать лишнюю библиотеку. Хотя с другой стороны, dependency injection использую в коммерческом коде либерально, ибо «улучшает жизнь».
Только полноправные пользователи могут оставлять комментарии. , пожалуйста.