Harbour Reference Guide

 

TYPE()

Retrieves the type of an expression

Syntax

TYPE( <cExp> ) --> <cRetType>

Arguments

<cExp> must be a character expression.

Returns

<cRetType> a string indicating the type of the passed expression.

<cRetType>Meaning
"A"array
"B"block
"C"string
"D"date
"L"logical
"M"memo
"N"numeric
"O"object
"U"NIL, local, or static variable, or not linked-in function
"UE"syntax error in the expression or invalid arguments
"UI"function with non-reserved name was requested

Description

This function returns a string which represents the data type of the argument. The argument can be any valid Harbour expression. If there is a syntax error in passed expression then "UE" is returned. If there is a call for any non-reserved Harbour function then "UI" is returned (in other words there is no call for passed UDF function during a data type determination - this is Clipper compatible behavior). Additionally if requested user defined function is not linked into executable then "U" is returned.

The data type of expression is checked by invoking a macro compiler and by evaluation of generated code (if there is no syntax errors). This causes that TYPE() cannot determine a type of local or static variables - only symbols visible at runtime can be checked.

Notice the subtle difference between TYPE and VALTYPE functions. VALTYPE() function doesn't call a macro compiler - it simply checks the type of passed argument of any type. TYPE() requires a string argument with a valid Harbour expression - the data type of this expression is returned.
Examples
       ? TYPE( "{ 1, 2 }" )                            //prints "A"
       ? TYPE( "IIF(.T., SUBSTR('TYPE',2,1), .F.)" )   //prints "C"
       ? TYPE( "AT( 'OK', MyUDF())>0" )                //prints "UI"
       ? TYPE( "{ 1, 2 }[ 5 ]" )                       //prints "UE"

       //--------------------------------------------------------

       LOCAL c
       PRIVATE a:="A", b:="B"
       ? TYPE( "a + b + c" )     //prints: "U" ('C' variable is a local one)

       //--------------------------------------------------------

       LOCAL cFilter := SPACE( 60 )
       ACCEPT "Enter filter expression:" TO cFilter
       IF( TYPE( cFilter ) $ "CDLMN" ) )
          // this is a valid expression
          SET FILTER TO &cFilter
       ENDIF

Status

Ready

Compliance


- Incompatibility with Clipper: In the following code:

PRIVATE lCond := 0 ? TYPE( "IIF( lCond, 'true', MyUDF() )" )

Clipper will print "UE" - in Harbour the output will be "UI"

- if "UI" is returned then the syntax of the expression is correct. However invalid arguments can be passed to function/procedure that will cause runtime errors during evaluation of expression.

Files

Library is rtl

See Also

 




[Source Forge]

Other Docs Categories

Advantage Database RDD
Array
Binary conversion
Classes
Code Block
Console input
Conversion
Conversion Tools
DOS
Data input and output
Database
Database Tools
Date
Dos Tools
Environment
Error recovery
Events
File management
GT
Harbour Tools
Internal
Low Level
Math
Misc
Miscellaneous
Nation
Object manipulation
Operating System Specific
Parameter Checks
String Tools
Strings
TBrowse Method
TBrowse class
Terminal
Time
Utility
Variable Management

 

Last updated on 2001/07/30