ПрограммированиеФорумОбщее

LUA: глюк при передаче параметров

#0
17:19, 17 ноя 2009

есть одна из функций структуры в луа:

function vec3:pop()
  return self.x, self.y, self.z
end

есть функция привязанная к движку:

some_engine_command( my_vec_0:pop(), my_vec_1:pop() )

в движок должно прийти 6 параметров, а прииходит лишь 4:
my_vec_0.x, my_vec_1.x, my_vec_1.y, my_vec_1.z

если поменять местами вектора то доходит одна компонента второго и 3 первого вектора

такие дела - че за баг не пойму.

подскажите как боролись если возникало.
...и как сами передаете вектора в двиг?

луабинд не предлагать :D

#1
17:46, 17 ноя 2009

mocia
> some_engine_command
Как зарегестрировал в студию.

#2
21:15, 23 ноя 2009

X512
  lua_register( luaVM, "some_engine_command ", lua_some_engine_command  );

#3
0:27, 24 ноя 2009

Это не баг а фича. http://www.lua.org/pil/5.1.html
Попробуй так

function unpacks( ... )
  local values = {}

  -- Collect values from all tables
  for i = 1, select( '#', ... ) do
    for _, value in ipairs( select( i, ... ) ) do
      values[ #values + 1] = value
    end
  end

  return unpack( values )
end


some_engine_command( unpacks({my_vec_0:pop()}, {my_vec_1:pop()}) )
#4
2:45, 24 ноя 2009

mocia
> some_engine_command( my_vec_0:pop(), my_vec_1:pop() )
странная конструкция... а почему нельзя some_engine_command( my_vec_0, my_vec_1 ) и в фукции some_engine_command использовать эти параметры как вектора?
лучше подумай над организацией кода, чем вставлять костыли, аля пост3.

ПрограммированиеФорумОбщее

Тема в архиве.