2012-06-05 3 views
11

Ответ на вопрос (я думаю), но я искал какое-то время, не найдя ничего, поэтому я буду направлять свой вопрос к вам.Как определить тип данных переменной

Существует typep, чтобы определить, имеет ли данная переменная какой-либо конкретный тип данных, например. целое число, хэш-таблица и т. д., но есть ли функция, которая возвращает тип данных?

например.

(defvar *x* 1) 
*x* 

(typep *x* 'integer) 
T 

(the-type-function *x*) 
INTEGER 
+2

см. «Оператор типа» –

+1

Хотя, для nitpick тип фактически привязан к * объекту * (хранится в переменной), а не к переменной. – Dirk

+0

Rainer Joswigs отвечают моим потребностям, поскольку у меня был класс, который я не мог идентифицировать, но нуждался в его типе, чтобы проверить его, прежде чем называть некоторые функции на нем. – Sim

ответ

22

Существует typep, чтобы определить, является ли данная переменная некоторого конкретного типа данных, например, целое, хэш-таблица и т. д.,

Не совсем. В Common Lisp переменные не набираются, как вы думаете.

(defvar *x* 1) 
*x* 

(typep *x* 'integer) 
T 

Выше ничего не говорит о типе переменной *x*. Он подтверждает, что объект 1 имеет тип integer.

но есть ли функция, которая возвращает тип данных?

Не совсем. Существует функция TYPE-OF, которая возвращает тип объекта, а не переменной.

> (type-of 1) 
FIXNUM 

Нет никакой разницы, когда мы получаем значение из переменной.

> (type-of *x*) 
FIXNUM 

Но это не означает, что переменная имеет этот тип.

Примечание: Common Lisp имеет типы и типы объявлений. Но это выглядит несколько иначе.

Смежные вопросы