Как из строчки сделать аргументы?

Tema05

Известный
Автор темы
1,471
435
Версия MoonLoader
.026-beta
У меня есть string переменная с аргументами разделёнными запятыми. Как можно эти аргументы достать из строки и поместить в функцию?
Lua:
local color = "0.8,0.2,0.2"

imgui.ImFloat3()

--Нужно что бы было вот так
--imgui.ImFloat3(0.8,0.2,0.2)

--Пробовал сделать вот так но loadstring возвращает функцию
--imgui.ImFloat3(loadstring("return " .. color))
 
Последнее редактирование:

wulfandr

Известный
636
260
У меня есть string переменная с аргументами разделёнными запятыми. Как можно эти аргументы достать из строки и поместить в функцию?
Lua:
local color = "0.8,0.2,0.2"

imgui.ImFloat3()

--Нужно что бы было вот так
--imgui.ImFloat3(0.8,0.2,0.2)

--Пробовал сделать вот так но loadstring возвращает функцию
--imgui.ImFloat3(loadstring("return " .. color))
Lua:
local color = "0.8,0.2,0.2"

imgui.ImFloat3(string.gsub(color, '"(%d+)"', "%1"))

--Нужно что бы было вот так
--imgui.ImFloat3(0.8,0.2,0.2)

--Пробовал сделать вот так но loadstring возвращает функцию
--imgui.ImFloat3(loadstring("return " .. color))
 
  • Bug
Реакции: Tema05

Tema05

Известный
Автор темы
1,471
435
Lua:
local color = "0.8,0.2,0.2"

imgui.ImFloat3(string.gsub(color, '"(%d+)"', "%1"))

--Нужно что бы было вот так
--imgui.ImFloat3(0.8,0.2,0.2)

--Пробовал сделать вот так но loadstring возвращает функцию
--imgui.ImFloat3(loadstring("return " .. color))
Я хз откуда ты такое взял, на 1 взгляд кажется что это не должно работать. Решил для теста попробовать ну и разумеется это не работает.
sol: no matching function call takes this number of arguments and the specified types
stack traceback:
[C]: in function 'ImFloat3'
D:\GTA San Andreas\moonloader\LiteHelper.lua:26: in main chunk
[11:12:04.754390] (error) LiteHelper: Script died due to an error. (2524CB54)
 

Izvinisb

Известный
Проверенный
963
599
Я хз откуда ты такое взял, на 1 взгляд кажется что это не должно работать. Решил для теста попробовать ну и разумеется это не работает.
sol: no matching function call takes this number of arguments and the specified types
stack traceback:
[C]: in function 'ImFloat3'
D:\GTA San Andreas\moonloader\LiteHelper.lua:26: in main chunk
[11:12:04.754390] (error) LiteHelper: Script died due to an error. (2524CB54)
Lua:
local s = "0.8,0.2,0.2"

function float_from_string(str)
    local arr = {}
    for i in str:gmatch("%d+%p%d+") do
        table.insert(arr, tonumber(i))
    end
    return arr
end

local somearr = float_from_string(s)
--imgui.ImFloat3(somearr[1], somearr[2], somearr[3])
 

Tema05

Известный
Автор темы
1,471
435
Lua:
local s = "0.8,0.2,0.2"

function float_from_string(str)
    local arr = {}
    for i in str:gmatch("%d+%p%d+") do
        table.insert(arr, tonumber(i))
    end
    return arr
end

local somearr = float_from_string(s)
--imgui.ImFloat3(somearr[1], somearr[2], somearr[3])
Ну так громоздко и я могу сделать.
Уже нашёл решение, странно что не додумался сделать так сразу.
Lua:
imgui.ImFloat3(color:match("(.+),(.+),(.+)"))
Lua:
local s = "0.8,0.2,0.2"

function float_from_string(str)
    local arr = {}
    for i in str:gmatch("%d+%p%d+") do
        table.insert(arr, tonumber(i))
    end
    return arr
end

local somearr = float_from_string(s)
--imgui.ImFloat3(somearr[1], somearr[2], somearr[3])
Таким же образом можно было сделать
Lua:
imgui.ImFloat3(unpack(split(color)))
 
Последнее редактирование:
  • Bug
Реакции: Izvinisb

Izvinisb

Известный
Проверенный
963
599
Ну так громоздко и я могу сделать.
Уже нашёл решение, странно что не додумался сделать так сразу.
Lua:
imgui.ImFloat3(color:match("(.+),(.+),(.+)"))

Таким же образом можно было сделать
Lua:
imgui.ImFloat3(unpack(split(color)))
ты помещаешь в аргументы функции числа, которые имеют строковый тип.
Lua does not have a split function in its standard library
 

Tema05

Известный
Автор темы
1,471
435

imring

Ride the Lightning
Всефорумный модератор
2,361
2,546
Пробовал сделать вот так но loadstring возвращает функцию
потому что надо её вызвать
Lua:
local args = '0.8,0.2,0.2'
local func = loadstring('return ' .. args)
if not func then return print('error') end
print(func())
-- 0.8    0.2    0.2
 

Tema05

Известный
Автор темы
1,471
435
потому что надо её вызвать
Lua:
local args = '0.8,0.2,0.2'
local func = loadstring('return ' .. args)
if not func then return print('error') end
print(func())
-- 0.8    0.2    0.2
как бы тема уже закрыта 100 лет назад) я уже сам это узнал
 
  • Нравится
Реакции: imring