Тип не является значением, он не имеет представления в памяти. Типы существуют только в исходном коде и используются средством проверки типов для статической проверки отсутствия определенных ошибок во время выполнения. Типы стираются из программы во время компиляции. Нет представления типа времени, как на других языках, таких как Java и C++.
Все значения представлены равномерно в OCaml, либо как немедленное целое число, либо как указатель на кучу. Следовательно, все значения имеют одинаковый размер, равный размеру машинного слова. Более того, строго говоря, представление стоимости является специфичным для реализации, и вы никогда не должны обращаться к нему напрямую. OCaml не является C, и он заботится о представлении памяти (и абстрагирует его). Так что попытка проникнуть во внутренние органы - плохая идея.
После пояснения в комментариях стало очевидно, что вы говорили о типе массива из библиотеки Ctypes. Библиотека Ctypes предоставляет интерфейс для языка C (в обоих направлениях) и представляет типы C как значения OCaml. Они также предоставляют тип CArray.t
, который представляет C-массивы как значения OCaml. Для этого массива, вы определенно можете получить размер, используя Ctypes.CArray.element_type
функцию, например,
let sizeof_element arr = sizeof (CArray.element_type arr)
функция Я ищу должен выглядеть следующим образом: VAL тип: «массив ->» а. Это не время работы. Я просто надеюсь, что эта функция может обрабатывать более общие случаи. –
У меня возникли проблемы с пониманием того, что вы подразумеваете под функцией, которая не работает. Функция типа, который вы здесь указываете, вернет * значение * типа ''a'. Он не возвращает сам тип. Примером функции с этим типом является 'let f a = a. (0)'. –