👉 out&ref

В нашей библиотеке реализована работа с out&ref посредством стека. При вызове функции с out/ref на стек ложится выходное значение/ссылка. А при создании новой переменной - забирается при наличии.

Это значит, что вы можете вызывать все C# функции, как игры, так и чита, без каких либо ограничений по параметрам в отличии от других API.

Пример с out:

local is_success, output = clr.System.Int32.TryParse("23")
log(is_success)
log(output)

По стандарту функция выглядит так:

public static bool TryParse(string s, out int result)

Вывод: True 23

Пример с ref из C#:

local value = 5
local new_value = clr.lua_lib_tests.main.test_ref(value)
log("value after ref:", new_value)

По стандарту функция выглядит так:

public static void test_ref(ref int value) => value += 1;

Вывод: value after ref: 6

Пример с ref из Lua:

function test_ref_lua(ref value: int)
    value = value + 1
end

local value2: int = 3
local result, new_value2 = test_ref_lua(value2)
-- by default func returns LuaResult so we have to make 2 variables.
-- if u wanna remove 1st param u should add ": void"
-- like this: function test_ref_lua(ref value: int) : void
-- local new_value2 = test_ref_lua(value2)
log("value2 after ref:", new_value2)

Вывод: value2 after ref: 4

Также вы можете задавать старой переменной новое значение.

Пример с ref из C#:

local value = 5
value  = clr.lua_lib_tests.main.test_ref(value)
log("value after ref:", value)

Вывод: value after ref: 6

Пример с ref из Lua:

function test_ref_lua(ref value) -- we can just put argument name without type
    value = value + 1
end

local value2 = 3
local result, value2 = test_ref_lua(value2)
-- by default func returns LuaResult so we have to make 2 variables.
-- if u wanna remove 1st param u should add ": void"
-- like this: function test_ref_lua(ref value) : void
-- value2 = test_ref_lua(value2)
log("value2 after ref:", value2 )

Вывод: value2 after ref: 4

Last updated