Meta
Метатаблицы настроек для работы с типами данных.
Поведение типов
Математические операторы (+, -, *, /, ^).
require 'l';
print(10 + '10'); --> 20
print(10 + 'ololo'); --> 10; если строку нельзя привести к числу, то это 0
print(10 + false); --> 10; false это 0
print(10 + true); --> 11; екгу это 1
print(10 + nil); --> 10; nil это 0
Склеивание строки (..)
require 'l';
print('Say ' .. 100); --> Say 100
print('Say ' .. 0); --> Say 0
print('Say ' .. false); --> Say 0;
print('Say ' .. true); --> Say 1
print('Say ' .. nil); --> Say
Пространства типов
По умолчанию строки имеют доступ к модулю string.
s = 'test';
-- function: 002C9978
print(s.upper);
-- (boolean)true
l.dump(s:upper() == string.upper(s));
С l числа имеют доступ к модулю math.
n = 10.5;
-- function: 006E9B38
print(n.ceil);
-- (boolean)true
l.dump(n:ceil() == math.ceil(n));
Булины и nil так же имеют свои пространства, но анонимные.
b = true;
b.some = 10;
-- (boolean)true
l.dump(b);
-- (number)10
l.dump(b.some);