Добавление в Lua функции из c++

1.07.2010. c++, Lua

0

Одним из достоинств lua-скриптов является то, что из них можно вызывать функции, написанные на c/c++.

Объявление функции:

int func(lua_State  *l);

После объявления о функции необходимо сообщить lua-интерпритаторы.

lua_register(l, "smile", func);

Первый параметр - указатель на экземпляр lua-интерпритатора, второй — имя функции, которой передается параметр, третий параметр — имя c/c++ функции, которая будет выполняться из lua
Теперь немного об обмене параметрами между lua-скриптом и нашей функцией.
Обмен между lua и основной программой осуществляется через стек. Количество параметров, передаваемых от скрипта фактически не ограничено и не является постоянным. Можно передать 1 параметр, а можно 20;)

int count = lua_gettop(l); //получаем количество переданных 
//параметров (и одновременно номер последнего элемента)

Теперь, когда мы знаем, сколько нам передали параметров можно получать и их самих:
Если вы точно знаете, какой тип данных и каким по счету вам передали, то для получения данного элемента можно использовать функцию lua_totype(l,n), где type — тип данных (number, string, nil, etc), а n — номер параметра (нумерация начинается с 1, а не с 0)
Для проверки типа данных можно использовать функцию lua_istype(l,n)
Большинство функций должны что-либо возвращать. Для того, чтоб передать lua возвращаемые параметры опять необходимо использовать стек, только теперь не читать его, а писать в него:
lua_pushtype(l, data) — вместо data — либо переменная, либо строчка заданного типа, type заменяется на тип (number,string)
Функции в lua могут возвращать несколько параметром. Количество возвращаемых функцией параметров возращается как результат ее работы:

return n;

Пример приметивной программы, считающий сумму чисел от 1 до переданного параметра:

#include <iostream>
#include "lua5.1/lua.hpp"
using namespace std;
 
int func(lua_State *l);
int main()
{
lua_State *l = lua_open();
luaL_openlibs(l);
lua_register(l, "sum", func); // регистрируем функцию,
//которая в lua будет иметь имя sum
luaL_dofile(l,"script.lua");
 
lua_close(l);
return 0;
}
int func(lua_State *l)
{
 
int count = lua_gettop(l); // получаем количество
// переданных параметров
if (count&lt;1){lua_pushstring(l,"Error"); return 0;} //если нам не передали
// параметров, то good bye
 
for (int j=0;j&lt; count;j++)
{
if (lua_isnumber(l,j+1)) //если число, то
{int n=lua_tonumber(l,j+1); // получаем j-тый
// переданный параметр
lua_pushnumber(l,(n*(n+1))/2); // сумма чисел
// от 1 до n — n*(n+1)/2
}
}
return count;
};
</iostream>
sums={sum(1,2,3,4,5,6,7,8,9,10)}; -- создаем массив sums,
-- состоящий из возвращенных функцией sum параметров
for i=1,10,1 do
io.write("Сумма от 1 до "..i.." "..sums[i].."\n");
end

Краткие основы JavaScript

19.06.2010. JavaScript

0

Что такое?

JavaScript - объектно-ориентированый скриптовой язык программирования, в первую очередь предназначенный для создание интерактивный (т.е. изменяющихся без перезагруки) web-страниц

Типы данных и переменные

Основные типы данных в javascript:

JavaScript - язык со свободными типами данных, т.е. можно проводить операции с различными типами данных (складывать число и строку и т.д.)

Переменные.

Переменная в javascript начинается с буквы, знака доллара или подчеркивания и может содержать только буквы, знак доллара, подчеркивание и цифры. Регистр, в котором написана переменная важен (a и A - разные переменные)
Создаются переменые очень просто:

Приведение типов

Для проведения некоторых операция требуется преобразование одного типа данных в другой. Для этого существуют специальные функции:

Примечание: запись func(a1[,a2[,a3..]]) означает, что в [ ] находятся необязательные параметры, которые можно опустить. Т.е. если написано s(a[,b]), то можно писать и s(a) и s(a,b)

Арифметические операторы

Математика

Функции

Math.функция

Константы

Math.константа

Логические операторы и операторы сравнения

Условные операторы

if  (условие) {code{ - если условие истино, то выполняется код в { }

if (условие)

{ code }

else

{code 2}

Если усовие истино, то выполняется code, иначе code 2

switch (выражение)

{

case value1:

код;

break;

case value2:

код2;

break;

default:

код

}

В зависимости от значение выполяется различные код, если ни одно значение не совпадает выполняется код, описанный в default

условие ? код 1 : код 2 - если условие истино, выполняется код 1, иначе код 2

Операторы цикла

for (инициализация, условие, изменение) {code} - цикл выполняется до тех пор, пока условие истино. Например for (i=0;i<13;i++) {a+=a}

while (условие) {код} - пока условие истино выполняем код

do { код } while (условие) - аналогично предыдущему, только сначала выполнится код, а потом проверится условие

Функции

Cоздание фукнции в Java Script:

function name(parametr1[,parametr2...)
{

code

}

Вызов

name(параметры);

Строки

Специальные функции для работы со строками:

escape(string) - возвращает escape-последовательность стоки

unescape(string) - обратная операция

eval - вычисляет значение выражения, записанного в строку. Например, eval("2+5") вернет 7

Свойства и методы объекта String:

Записывается так: имя перемнной.свойство (метод)

Массивы

Массивы - множество переменных, объединеных общим именем.

Создание массива - name = new Array ([длинна])

Пример:

a=new Array;

a[0]=0;

a[1]="one";

a[2]=true;

И т.д.

Свойства и методы массивов в JavaScript:

Страница 1 из 11

Rambler's Top100 Блогун - монетизируем блоги