Function TYPE-OF
type-of
object => typespec
object - オブジェクト
typespec - 型指定子
objectが要素という立場で保有されている型の 型指定子typespecを返却します。 返却値であるtypespecは下記の条件を満たします。
and
, eql
, member
, not
, or
, satisfies
, values
, を含んでいないときは、その型自身を返却全てのオブジェクトobjectについて、 (typep object (type-of object))
はtrueを返却します。 これは暗に、例えばリストフォームの function
型指定子のように、 typep
で有効ではない型指定子はtype-of
から 決して返却しないことを意味しています。
type-of
の返却値の型は、 常にclass-of
による返却値のクラスの 認識可能なサブタイプです。 つまり、下記のようになります。
subtypep (type-of object) (class-of object)) => true, true (
メタクラスがstructure-class
, standard-class
, またはコンディションのobjectについて、 class-of
によって返却されるクラスがが正しい名前を持つとき、 type-of
は、その名前を返却します。 それ以外のときは、クラス自身が返却されます。 特に、:type
オプションなしでdefstruct
によって定義された 構造体の構築関数で作られたobjectは、 type-of
関数は構造体の名前を返却します。 また、make-condition
によって作られたobjectは、 返却値typespecはコンディション型の名前です。
次の型short-float
, single-float
, double-float
, long-float
のobjectの返却値typespecは、 その型の認識可能なサブタイプです。
type-of 'a) => SYMBOL
(type-of '(1 . 2))
(=> CONS
OR=> (CONS FIXNUM FIXNUM)type-of #c(0 1))
(=> COMPLEX
OR=> (COMPLEX INTEGER)defstruct temp-struct x y z) => TEMP-STRUCT
(type-of (make-temp-struct)) => TEMP-STRUCT
(type-of "abc")
(=> STRING
3)
OR=> (STRING subtypep (type-of "abc") 'string) => true, true
(type-of (expt 2 40))
(=> BIGNUM
OR=> INTEGER1099511627776 1099511627776)
OR=> (INTEGER
OR=> SYSTEM::TWO-WORD-BIGNUM
OR=> FIXNUMsubtypep (type-of 112312) 'integer) => true, true
(defvar *foo* (make-array 5 :element-type t)) => *FOO*
(class-name (class-of *foo*)) => VECTOR
(type-of *foo*)
(=> VECTOR
5) OR=> (VECTOR T
なし。
なし。
array-element-type
, class-of
, defstruct
, typecase
, typep
, 4.2. 型
実装はtype-of
が移植可能な値を返却するように 改良することを勧められます。