Type

Gibt den Klassennamen eines Wertes zurück.

KlasseName := Type(Wert)

Rückgabewert

Typ: Zeichenkette

Diese Funktion gibt den Klassennamen von Wert zurück.

Der Algorithmus zur Ermittlung des Klassennamens eines Wertes lässt sich näherungsweise wie folgt darstellen:

TypeOf(Value)
{
    if (comClass := ComObjType(Value, "Class")) != ""
        return comClass
    try ; `Value is Object` wird nicht geprüft, da es bei Prototypen False sein kann.
        if ObjHasOwnProp(Value, "__Class")
            return "Prototype"
    while Value := ObjGetBase(Value)
        if ObjHasOwnProp(Value, "__Class")
            return Value.__Class
    return "Object"
}

Handelt es sich um COM-Wrapper-Objekte, kann der Klassenname auch anhand des Variantentyps wie folgt ermittelt werden:

ComObject_Type(obj)
{
    if ComObjType(obj) & 0x2000 ; VT_ARRAY
        return "ComObjArray" ; ComObjArray.Prototype.__Class
    if ComObjType(obj) & 0x4000 ; VT_BYREF
        return "ComValueRef" ; ComValueRef.Prototype.__Class
    if (ComObjType(obj) = 9 || ComObjType(obj) = 13) ; VT_DISPATCH || VT_UNKNOWN
        && ComObjValue(obj) != 0
    {
        if (comClass := ComObjType(obj, "Class")) != ""
            return comClass
        if ComObjType(obj) = 9 ; VT_DISPATCH
            return "ComObject" ; ComObject.Prototype.__Class
    }
    return "ComValue" ; ComValue.Prototype.__Class
}

Bemerkungen

Diese Funktion sollte typischerweise nicht verwendet werden, um zu prüfen, ob ein Wert numerisch ist, da numerische Zeichenketten in mathematischen Ausdrücken oder in Verbindung mit den meisten internen Funktionen gültig sind. In einigen Fällen kann der genaue Typ eines Wertes aber wichtig sein. Verwenden Sie in solchen Fällen nicht Type, sondern Wert is Number oder ähnliches.

Mit der IsNumber-, IsInteger- oder IsFloat-Funktion kann geprüft werden, ob ein Wert als Zahl verwendet werden kann.

Mit der IsObject-Funktion kann geprüft werden, ob ein Wert ein Objekt beliebigen Typs ist (also alles, was kein primitiver Wert ist).

Mit dem is-Operator kann geprüft werden, ob ein Wert eine Instanz einer bestimmten Klasse ist. Dies kann auch in Verbindung mit primitiven Werten oder zur Identifizierung von COM-Wrapper-Objekten verwendet werden.

Werte, Ausdrücke (Expressions), Is-Funktionen, Integer, Float, String

Beispiele

Ermittelt und meldet den genauen Typ der Werte, die in a, b und c gespeichert sind.

a := 1, b := 2.0, c := "3"
MsgBox Type(a)  ; Integer
MsgBox Type(b)  ; Float
MsgBox Type(c)  ; String