Кодовая база я продолжаю работать, имеет более чем 4 000 предупреждений. Некоторые из них являются законными проблемами. Нам никогда не дают время, чтобы войти и зафиксировать их, ни осуществить рефакторинг другие поврежденные вещи... Частично, это вызвано тем, что код так стар, он предшествует стандартизированному C++. Мы можем только скомпилировать в VC ++ 6.
OCaml имеет структурную типизацию для объектов, а не номинативную типизацию, как в Java. Таким образом, тип объекта в основном определяется (и определяется только) его методами. Объекты в OCaml могут быть созданы напрямую, без прохождения чего-то вроде класса.
Вы можете писать функции, которые требуют, чтобы его объекты аргументов имели определенные методы (и чтобы эти методы имели определенные типы); например, следующий метод принимает аргумент, который является любым объектом с методом «bar»:
let foo x = x#bar
Там обсуждается «Сопоставление объектов с образцами» на Lambda the Ultimate (в документе используется Scala в качестве языка, поэтому я не буду отвечать ваш вопрос). Более релевантная ветка списка рассылки Ocaml указывает на отсутствие RTTI / безопасного понижающего преобразования для объектов.
Для алгебраических (не объектных) типов у вас, очевидно, есть:
match expr with
Type1 x -> x
Type2 (x,y) -> y
вызвал (шаблон) сопоставление
Кто-то написал расширение , которое позволяет понижать / повышать качество объектов Ocaml.
Короче говоря, вам нужно закодировать свой собственный механизм RTTI. OCaml не обеспечивает RTTI или приведение типов вверх / вниз (последнее отчасти потому, что наследование и подтипы ортогональны в OCaml, а не унифицированы, как в Java).
Вы можете сделать что-нибудь со строками или полиморфными вариантами для кодирования информации о типах в ваших классах и объекты. Я считаю, что LablGTK кое-что из этого делает и предоставляет служебную библиотеку для поддержки тегов объектов и преобразования вверх / вниз.
Можно проверить свойство .length
объекта jQuery. Например:
if($("#two").length > 0) { // exists...
} else { // doesn't exist
}
-121--1857322- Попробуйте http://incubator.apache.org/click/ . Это потрясающая веб- рамка Java. Некоторые люди называют его «Калитка сделана правильно»; -)
-121--1115440-Несколько вне темы, но язык OPA (который в значительной степени берется из некоторых аспектов OCaml) позволяет эквивалентно совпадению шаблонов на объектах. Так что это вполне осуществимо.