OCaml: введите объекты проверки

Кодовая база я продолжаю работать, имеет более чем 4 000 предупреждений. Некоторые из них являются законными проблемами. Нам никогда не дают время, чтобы войти и зафиксировать их, ни осуществить рефакторинг другие поврежденные вещи... Частично, это вызвано тем, что код так стар, он предшествует стандартизированному C++. Мы можем только скомпилировать в VC ++ 6.

7
задан Nathan Kleyn 13 April 2013 в 21:03
поделиться

4 ответа

OCaml имеет структурную типизацию для объектов, а не номинативную типизацию, как в Java. Таким образом, тип объекта в основном определяется (и определяется только) его методами. Объекты в OCaml могут быть созданы напрямую, без прохождения чего-то вроде класса.

Вы можете писать функции, которые требуют, чтобы его объекты аргументов имели определенные методы (и чтобы эти методы имели определенные типы); например, следующий метод принимает аргумент, который является любым объектом с методом «bar»:

let foo x = x#bar
7
ответ дан 6 December 2019 в 21:17
поделиться

Там обсуждается «Сопоставление объектов с образцами» на Lambda the Ultimate (в документе используется Scala в качестве языка, поэтому я не буду отвечать ваш вопрос). Более релевантная ветка списка рассылки Ocaml указывает на отсутствие RTTI / безопасного понижающего преобразования для объектов.

Для алгебраических (не объектных) типов у вас, очевидно, есть:

match expr with 
  Type1 x -> x
  Type2 (x,y) -> y

вызвал (шаблон) сопоставление

Кто-то написал расширение , которое позволяет понижать / повышать качество объектов Ocaml.

5
ответ дан 6 December 2019 в 21:17
поделиться

Короче говоря, вам нужно закодировать свой собственный механизм RTTI. OCaml не обеспечивает RTTI или приведение типов вверх / вниз (последнее отчасти потому, что наследование и подтипы ортогональны в OCaml, а не унифицированы, как в Java).

Вы можете сделать что-нибудь со строками или полиморфными вариантами для кодирования информации о типах в ваших классах и объекты. Я считаю, что LablGTK кое-что из этого делает и предоставляет служебную библиотеку для поддержки тегов объектов и преобразования вверх / вниз.

1
ответ дан 6 December 2019 в 21:17
поделиться

Можно проверить свойство .length объекта jQuery. Например:

if($("#two").length > 0) { // exists...

} else { // doesn't exist

}
-121--1857322-

Попробуйте http://incubator.apache.org/click/ . Это потрясающая веб- рамка Java. Некоторые люди называют его «Калитка сделана правильно»; -)

-121--1115440-

Несколько вне темы, но язык OPA (который в значительной степени берется из некоторых аспектов OCaml) позволяет эквивалентно совпадению шаблонов на объектах. Так что это вполне осуществимо.

-1
ответ дан 6 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: