Re: сохранение игр когда room не в глобальном пространстве имен

Так, тогда сяду думать...

Re: сохранение игр когда room не в глобальном пространстве имен

По идее, можно пристраивать key_name к строковым именам объектов в namespace, этого будет достаточно,
внутри функция объектов все видно, но не видно в функции инициализации namespace...

То есть что делать - понятно, непонятно как делать...

Re: сохранение игр когда room не в глобальном пространстве имен

Не - ну вариант с явным присваиванием this перед инициализацией namespace тоже вариант. smile

Re: сохранение игр когда room не в глобальном пространстве имен

Сделал как-то так:

-- $Name: Test23$
-- $Version: 0.0$

require("namespace")

function namespace_with_self(s, name)
        function rep_self(d)
                local l, k
                for l, k in pairs(d) do
                        if type(d[l]) == "string" then
                                d[l] = k:gsub("#", name..".")
                                print(l, d[l])
                        elseif type(d[l]) == "table" then
                                rep_self(d[l])
                        end
                end
                return d
        end
        return namespace(rep_self(s))
end
db = namespace_with_self({
        test = obj {
                nam = "Ничто",
                tak = "Я не взял ничего",
                dsc = function(s)
                    p"Я не вижу {ничего} интересного"
                    p(s.key_name)
                end
        },
        test2 = room {
                nam = "Тест2",
                dsc = "Где-то там",
                way = {"main"},
                obj = {
                        "#test",
                },
        },
}, "db")

main = room {
        nam = "Начало",
        dsc = "Что-то здесь не так",
        obj = {"db.test"},
        way = {
                "db.test2",
        }
}

Но хочется чего-то большего, светлого и хорошего...

Re: сохранение игр когда room не в глобальном пространстве имен

Понял, что есть существенная проблема. Нельзя несколько неймспейсов объединять.
Теперь можно - появился режим добавления:

namespace {
   "a",
    var { a = 1 };
};

namespace {
    "a",
    var {b = 2 };
}

или:

namespace {
    nam = "a",
    var {b = 2 };
}