Elias
Но мне вечно лень это делать, поэтому print и debug.traceback() решают :D
Elias
https://github.com/kikito/inspect.lua
Я это юзал
Не знаю, насколько лучше или хуже :D
B
жесский вопрос:
что такое разименовывание
Yuriy
Зачем тебе это? К луа эо отношения не имеет, а в доках по c/c++ это довольно неплохо расписано
Anonymous
Dereference = разыменование в русских переводах
Anonymous
Не знаю зачем так перевели
Aleksey
У меня есть класс someClass с тремя полями: { field1, field2, field3 }. Экземпляры этого класса я использую как ключ в таблице. Например так: tabl[someClass1] = "something", tabl[someClass2] = "something else".
Проблема такая: если я использую один и тот же объект несколько раз, то каждый раз создаётся новая строка в таблице.
Как сделать так, чтобы значение перезаписывалось по одному и тому же ключу?
Я так понимаю проблема в использовании объекта?
Tverd
ты хочешь получить расшареный базовый класс? Что бы объекты перезаписывали класс и что бы во всех объектах эти поля менялись тут же?
Aleksey
Я не рассматриваю ее как класс. Я хочу таблицу, где попарно будут записаны:
мой объект - значение
другой объект - его значение.
Так, я постараюсь с более конкретным примером.
У меня есть точка Point{x,y}. И я заполняю таблицу:
Точка (0,1) - 10
Точка(6,7) - 12.
А потом мне надо переписать значение для Точка(0,1). Я пишу tabl[Точка(0,1)] = 15.
А в итоге создаётся новая строка, и в моей таблице две точки с координатами (0,1).
Tverd
Ну тут можно попробовать кодировать каждый объект. ID объекта или хэшировать как-то
Tverd
может __tostring поможет
Aleksey
Хорошо, я почитаю про _tostring. А есть предположение, из-за чего это происходит? Значения полей одинаковые, объект один и тот же, почему интерпретатор считает это разными ключами?
Aleksey
По-моему tostring это что-то другое
Aleksey
Если брать ключи как строки, то потом придется парсить их, вытаскивать эти координаты
Aleksey
Хотелось бы этого избежать
Tverd
ну потому что это боюсь разные таблицы, по этому и ключ разный...
Tverd
Странный вообще-то подход, ты после какого языка за луа взялся?
Aleksey
Шарп и плюсы.
Что отличает эти таблицы?
Aleksey
Хорошо, я понял, спасибо
Tverd
слишком яркий смайл получился... ну да ладно )
Aleksey
Я все ещё не могу понять, как организованы таблицы в луа. Я для теста сделал две таблицы:
local a = Point{ x = 1, y = 2 }
local b = Point{ x = 1, y = 2 }
Затем делаю сравнения и какие-то загадочные результаты:
a.x == b.x показывает false
Но a.y == b.y вдруг true
ㅤ
Ф-ция Point что делает?
ㅤ
Таких загадочных результатов не должно быть. Скорее всего Point возвращает какую-то гадость.
Aleksey
function Point(x,y)
return {x = x, y = y}
end
ㅤ
А, ну вот и всё.
ㅤ
Ты передаёшь в неё один аргумент, и этот аргумент — таблица.
ㅤ
x у тебя таблица, а y — nil.
Aleksey
Ага, понял
Aleksey
Теперь работает
Aleksey
Спасибо и простите, что бомблю идиотскими вопросами
ㅤ
Лучше, чем мертвецкая тишина.
fgntfg
Лучше спросить про луа, чем про контробанду сигарет
_AMD_
Про сижки тоже интересно было. Не думаю, что стоит уж так сильно все цензурить. Натянутая атмосфера получается
Vasiliy
у меня друг привез с кубы жену
Vasiliy
кстати, к вопросу о возможности переопределить хэш для таблиц, может и неплохо было бы.
Vasiliy
хотя и не помню чтобы возникала такая потребность хоть раз...
Vasiliy
видимо, связано с тем что привык не городить ооп в луа
Aleksey
Друзья, снова нужна ваша помощь )=
В какой-то момент моя программа собирает некую таблицу tabl.
И я наблюдаю разное поведение в следующих двух случаях:
1. Делаю for k,v in pairs(tabl) do и в цикле вывожу содержимое таблицы на экран.
2. Тот же самый цикл помещаю внутрь функции и передаю ей tabl, как аргумент.
Aleksey
В чем может быть причина?
ㅤ
А в чём поведение разное?
ㅤ
Если разный порядок обхода ключей, то это не страшно.
Aleksey
Внутри функции значения выводятся бесконечно, при этом среди них есть значения из первого случая, но почему-то не все
ㅤ
Нужен код.
Aleksey
Про порядок я понимаю, он не важен
ㅤ
Может, ты при обходе таблицы в функции что-то в неё дописываешь? Нужен пример.
Anonymous
А луа не отлавливает попеременный доступ?
Anonymous
Помню в джаве был эксепшн по этому поводу
fgntfg
Кот покажи.
Aleksey
local function definePath(movements, start, goal)
local path = { goal }
local node = goal
while not equals(node, start) do
for k,v in pairs(movements) do
print((%s %s %s %s):format(k.q, k.s, v.q, v.s))
end
end
end
return path
end
Aleksey
Вне функции я просто пускаю вот этот же самый принт и вывод другой
fgntfg
У тебя цикл бесконечный.
fgntfg
кажется
fgntfg
k.q и k.s скорей всего nul.
fgntfg
они не существуют
fgntfg
а простой код какой?
fgntfg
Что пишется в movements?
ㅤ
Если честно, пример какой-то очень странный. Лишний end, и return как будто снаружи функции.
fgntfg
@aesee скинь весь код куданить на пастбин или чтото
Aleksey
Я сейчас на работе, где нет интернета. Если вы меня не запинаете ногами за такое, я могу выложить фотографию функции
ㅤ
Выкладывай.
Aleksey
ㅤ
Ну, бесконечно крутится именно цикл while, а не обход таблицы.
fgntfg
у тебя в k попадает индекс таблицы, не предидущее значение
ㅤ
Ещё странно то, что ты в одном месте сравниваешь k и node, а в другом месте делаешь node = v.
Aleksey
Я работаю с гексами,где hex{q, r, s}
Aleksey
В таблице попарно два гекса
Aleksey
Из какого гекса куда
Aleksey
И k, и v - это гексы, то есть
fgntfg
ты уверен?
Aleksey
Я проверяю гексы от конца пути до начала. Если нужный гекс найден, я дальше рассматриваю тот, из которого мы в него пришли
ㅤ
Может ли быть, что входные данные кривые?
Aleksey
Да, я уверен
Aleksey
Но принт вне функции показывает, что с данными все в порядке
fgntfg
у тебя в movements каждый элемент {from, to}?
Aleksey
to, from
fgntfg
не суть
fgntfg
добавь принт типов v и k
Aleksey
table
ㅤ
Там точно таблица вида
{
from1 = to1,
from2 = to2,
}
А не вида
{
[1] = {from1, to1},
[2] = {from2, to2},
}
?
(Приходится подключить libtelepath.)