Поскольку я довольно широко использую DYNEVAL и DYNAMIC (в том числе и в своём фреймворке), возникла следующая мысль: было бы очень неплохо иметь возможность работать с кодом самих локаций, т.е. получать, изменять и сохранять его программным образом.
Например:
LOCGETCODE(<ИмяЛокации>) — получить код локации
LOCSETCODE, <ИмяЛокации>, <ПрограммныйКод> — установить код локации
Спору нет, широкого применения этот функционал не получит, поэтому попробую пояснить для чего это нужно мне лично:
В своём фреймворке во многих командах автор должен передать программный код, который должен выполняться в тех или иных случаях (например, что должно происходить при перемещении предмета). Нюанс в том, что сейчас предпочтительней передавать этот код как строку ("…" или {…}), потому что тогда фреймворк автоматически заменяет в нём ссылки на объекты на их фактические значения. Например при работе с экземплярами объектов это просто необходимо — автор в коде указывает просто $ОБЪЕКТ, а при выполнении $ОБЪЕКТ заменяется на фактический экземпляр объекта, что позволяет точно знать, с каким именно объектом в каком месте нужно производить манипуляции. Если бы можно было программно работать с кодом локации, то автор мог просто указывать имя локации, которая должна вызываться (для многих это было бы привычней, да и сообщения об ошибках были бы более информативнее).
Неактивен
Переделывать нужно не QSP, а плохо написанный фреймворк.
Неактивен
Насколько я понял, претензия Олегуса заключается в том, что в его фреймворке ему приходится каждый раз передавать строку кода в "явном виде", вместо того, чтобы один раз задать ее где-то и после только ссылаться.
Для решения этой проблемы он предлагает переделать QSP, т.к. считает, что по-другому эту проблему не решить.
Я считаю, что эту проблему можно решить существующими средствами. То есть,
один раз задать код где-то и после только ссылаться
можно и сейчас, просто Олегус не знает, как это сделать.
Возможно, я ошибся насчет сути претензий: без бутылки водки и подробных разъяснений автора в этих адских дебрях хрен разберешься. В таком случае прошу меня поправить.
Неактивен
Ты как всегда ничего не понял
Толсто.
- Доктор, почему когда я делаю вот так, мне больно?
- А вы не делайте так.
Страдания от попыток реализовать объектную систему на движке, для этого не предназначенном, вполне закономерны.
Хочешь "просто и удобно" - используй заточенный на объекты и программизмы движок, например INSTEAD.
Берешься забивать гвозди микроскопом - не жалуйся.
Неактивен
работу с объектами ты сравниваешь с гвоздями, а QSP в этом контексте с микроскопом? Всё же не совсем подходящая метафора.
QSP настолько же предназначен для работы с объектами, насколько микроскоп - для забивания гвоздей. То, что в QSP можно при известном усилии делать объекты, ничего не меняет - ведь и микроскопом можно гвозди забить.
твой обычный лозунг — если не нравится, как всё есть, используй другую платформу!
Врешь, это никогда не было и не будет моим лозунгом.
Теперь по сути вопроса:
Программный код задаётся автором один раз — когда он прописывает то или иное действие. В дальнейшем фреймворк вызывает именно этот сохранённый код. Однако в некоторых случаях автору в этом коде нужно ссылаться на некие изменяемые значения, например на идентификатор конкретного экземпляра обрабатываемого этим кодом предмета.
Вот я "сослался на некое изменяемое значение":
$ОБЪЕКТ = 'ПЕРВОЕ ЗНАЧЕНИЕ' $code = {*PL $ОБЪЕКТ} $ОБЪЕКТ = 'ВТОРОЕ ЗНАЧЕНИЕ' DYNAMIC $code
Все работает без всяких ARGS.
Неактивен
Покажи конкретный пример, где это "не подходит".
Вне фреймворка, просто пример кода. Я пытаюсь понять, что тебе нужно, но пока упираюсь в то, что без тотального перелопачивания адского движка яснее не станет.
$ОБЪЕКТ - не глобальная переменная? А что?
"Фактический экземпляр объекта"? - что это означает?!
"Пакет данных, который содержит идентификаторы объекта и места, где конкретный экземпляр объекта находится"? - аналогично.
Приведи пример кода, без фреймворка?
Неактивен
...вызов различных участков кода, ранее сохранённых автором (модуль формирования описания локации, модуль обработки свойства и т.п.), в которых используются идентификаторы разных объектов.
А берутся-то откуда эти идентификаторы? И как выглядит значение идентификатора?
Отредактировано Nex (07.08.2011 07:58)
Неактивен
в тексте модуля все вхождения подстроки "$ОБЪЕКТ" заменяются на его числовое значение.
В таком случае, что здесь может "поменяться впоследствии при вызове других функций", если числовое значение уже на момент вызова кода подставлено вместо $ОБЪЕКТ?
Отредактировано Nex (07.08.2011 12:14)
Неактивен
Что значит "такой подход ... перенести на локации"?
Неактивен