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
Шарп и плюсы. Что отличает эти таблицы?
Tverd
Шарп и плюсы. Что отличает эти таблицы?
если ты сделаешь print таблицы - ты увидишь ее адрес. Вот считай это ключ. Новая таблица, новый адрес, новый ключ
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.)