Squirrel is a dynamically typed language so variables do not have a type, although they refer to a value that does have a type. Squirrel basic types are integer, float, string, null, table, array, function, generator, class, instance, bool, thread and userdata.
An Integer represents a 32 bits (or better) signed number.
local a = 123 //decimal local b = 0x0012 //hexadecimal local c = 075 //octal local d = 'w' //char code
Strings are an immutable sequence of characters to modify a string is necessary create a new one.
Squirrel's strings, behave like C or C++, are delimited by quotation marks(") and can contain escape sequences(\t,\a,\b,\n,\r,\v,\f,\\,\",\',\0,\xhhhh).
Verbatim string literals begin with @" and end with the matching quote. Verbatim string literals also can extend over a line break. If they do, they include any white space characters between the quotes:
local a = "I'm a wonderful string\n" // has a newline at the end of the string local x = @"I'm a verbatim string\n" // the \n is copied in the string same as \\n in a regular string "I'm a verbatim string\n"
The only exception to the "no escape sequence" rule for verbatim string literals is that you can put a double quotation mark inside a verbatim string by doubling it:
local multiline = @" this is a multiline string it will ""embed"" all the new line characters "
The null value is a primitive value that represents the null, empty, or non-existent reference. The type Null has exactly one value, called null.
local a=null
the bool data type can have only two. They are the literals true and false. A bool value expresses the validity of a condition (tells whether the condition is true or false).
local a = true;
Tables are associative containers implemented as pairs of key/value (called a slot).
local t={} local test= { a=10 b=function(a) { return a+1; } }
Arrays are simple sequence of objects, their size is dynamic and their index starts always from 0.
local a=["I'm","an","array"] local b=[null] b[0]=a[2];
Functions are similar to those in other C-like languages and to most programming languages in general, however there are a few key differences (see below).
Classes are associative containers implemented as pairs of key/value. Classes are created through a 'class expression' or a 'class statement'. class members can be inherited from another class object at creation time. After creation members can be added until a instance of the class is created.
Class instances are created by calling a class object. Instances, as tables, are implemented as pair of key/value. Instances members cannot be dyncamically added or removed however the value of the members can be changed.
Generators are functions that can be suspended with the statement 'yield' and resumed later (see Generators).
Userdata objects are blobs of memory(or pointers) defined by the host application but stored into Squirrel variables (See Userdata and UserPointers).
Threads are objects that represents a cooperative thread of execution, also known as coroutines.
Weak References are objects that point to another(non scalar) object but do not own a strong reference to it. (See Weak References).