Узлы "act" и "action" как-то отличаются?
vTOM2
Сообщений 31 страница 60 из 90
Поделиться322014-09-19 18:30:43
"act" игнорируй, эти объекты не обрабатываются движком, задел на будущее.
Поделиться332014-09-20 09:12:43
Я так понимаю, у слова и предлоги не могут наследоваться? Тогда я выношу их в отдельный список.
Ещё вопрос возник: допустим мы хотим сделать проверку на наличие слова для вновь создаваемого объекта. Пользователь создаёт объект, допустим, с именем "Алиса". Такого слова нет в стандартной библиотеке, т.е. платформа не сможет определять объект по введённым командам типа "осм Алису". Значит, нужно добавить слово в словарь. Редактор должен предупреждать и предлагать пользователю создать слово к объекту. Как ему определить, что для объекта необходимо добавить слово?
Можно было бы просто проводить поиск в словаре по имени созданного объекта, но имя ведь может быть чем-то типа "на_поверхности", "в_башне". Меня это сбивает с толку.
Отредактировано Alexandr (2014-09-20 09:14:29)
Поделиться342014-09-20 09:47:28
И ещё вопрос: почему переменные наследуются от классов?
<variable>дворянин <cls>аристократ</cls> </variable>
Как вообще такое возможно? Это же обычная глобальная переменная. Какое может быть наследование? Если заглянуть в старый dic_viewer, то там про дворянина пишется так:
var дворянин=аристократ
Никакого наследования, просто приравнивание. Я совсем запутался.
Вот ещё нечто необычное:
<variable>оглядеться <cls>осмотреться</cls> <arg>оглядись Акт*Пф!е</arg> </variable>
Какие аргументы у переменной???
Отредактировано Alexandr (2014-09-20 10:58:41)
Поделиться352014-09-20 13:02:07
Я так понимаю, у слова и предлоги не могут наследоваться? Тогда я выношу их в отдельный список.
Могут наследоваться в будущем от грамматических классов "глагол", "местоимение", "существительное" и т.п.
Сейчас такого наследования нет. Но список для слов действительно нужен отдельный, и рассчитывая на будущее, можно сразу сделать его в виде дерева.
Как ему определить, что для объекта необходимо добавить слово?
Можно было бы просто проводить поиск в словаре по имени созданного объекта, но имя ведь может быть чем-то типа "на_поверхности", "в_башне".
все идентификаторы в коде делятся на 2 типа:
1. называемые словами;
2. не называемые словами.
Все объекты и переменные 1 типа могут упоминаться игроком в командах ЕЯ.
Все служебные и вспомогательные объекты и переменные должны называться именами 2 типа.
К идентификаторам 2-го типа однозначно можно отнести всё, начинающееся со знаков "_" и "@".
Все остальные идентификаторы потенциально могут быть названы словом или словосочетанием.
Составные идентификаторы, образованные с помощью знаков "_" и ":" относятся к 1 типу, если все части идентификатора до первого ":" совпадают c каким-либо словом или любой его словоформой.
Вот такое сложное правило =)
На самом деле там есть еще нюансы, но для проверки наличия слов в словаре достаточно проверить первый символ, разобрать идентификатор на части и проверить каждую часть на наличие в словаре.
почему переменные наследуются от классов?
Код:<variable>дворянин <cls>аристократ</cls> </variable>Как вообще такое возможно? Это же обычная глобальная переменная. Какое может быть наследование? Если заглянуть в старый dic_viewer, то там про дворянина пишется так:
Код:var дворянин=аристократ
Да, в данном случае "cls" лучше заменить на "value"
Сделаю в следующей выгрузке.
Вот ещё нечто необычное:
Код:<variable>оглядеться <cls>осмотреться</cls> <arg>оглядись Акт*Пф!е</arg> </variable>
Да, <arg> здесь действительно не нужен, остался в базе от предыдущего варианта как рудимент.
Я сейчас не делаю какого-либо анализа данных при формировании XML, в выгрузку попадает всё что есть в базе.
Поделиться362014-09-20 15:30:20
Похоже там бардак какой-то. Элементы <arg> ты сказал игнорировать. Но от элемента
<act>перемещение <cls>действие</cls> </act>
наследуется куча других объектов, например:
<action>ползти в локацию <cls>перемещение</cls> <arg>ползи#Пф!е, location Мст#Ап!е</arg> <code>--check-- if(loc==Мст) fail, "ты уже здесь" pers.может_действовать Ok --execute-- //pers._перемещение = word ползти goto Мст</code> </action>
Получается, что я не могу нормально связать всю цепочку наследования.
Поделиться372014-09-20 19:12:03
Похоже там бардак какой-то. Элементы <arg> ты сказал игнорировать. Но от элемента
тут <act> видимо, а не <arg>?
Объекты типа <act> игнорируются в том смысле, что от них сейчас не образуется никакого кода, и в файле tom.dic их нет.
А на дереве объектов это вполне себе полноценный узел.
Теги <cls> (<cls>перемещение</cls>) внутри функций, тоже игнорируются в коде, и нужны только для построения дерева.
Иначе все функции были бы в одном плоском списке.
Нет такого понятия как наследование функций.
<act_sin> это отдельный вопрос. Там с тегом <cls> такая же ерунда как у <variable>.
Поделиться382014-09-21 13:14:26
Да, в данном случае "cls" лучше заменить на "value"
Сделаю в следующей выгрузке.
Можешь сделать новую выгрузку с такой заменой в variable и act_sin? А так-же убрать arg из переменных, если не сложно.
И ещё напиши немного про атрибуты <attribute>. Где используются, что могут содержать (наследование <cls>, код <code>...). И в каком виде их лучше отображать?
Отредактировано Alexandr (2014-09-21 13:17:48)
Поделиться392014-09-21 14:06:49
Можешь сделать новую выгрузку с такой заменой в variable и act_sin? А так-же убрать arg из переменных, если не сложно.
Не сложно, сделаю конечно. Но не раньше понедельника =)
И ещё напиши немного про атрибуты <attribute>. Где используются, что могут содержать (наследование <cls>, код <code>...).
Атрибут (признак), это грубо говоря класс для логических свойств.
Объект типа attribute больше всего похож на class, только для класса экземпляром является объект, а для атрибута - логическое свойство объекта.
Если объекту присваивается свойство и имя свойства присутствует в списке атрибутов, это свойство обрабатывается как экземпляр атрибута.
Значение атрибута объекта может быть только логического типа.
Есть несколько операций с атрибутами:
<obj>.attribute //возвращает список истинных признаков объекта <obj>
<list> / <attr> //отбирает из списка <list> объекты с истинным значением признака <attr>
Также планируется много различной логики построенной на атрибутах в ст.библиотеке.
Сейчас там есть функция отбора объекта по признаку ("осмотри старую башню") и механизм отображения надетых на персонажа вещей.
Наследоваться attribute может от class или от другого attribute.
Может содержать свойства и методы.
И в каком виде их лучше отображать?
Отображать в общем дереве вместе с классами.
Поделиться402014-09-21 21:20:23
Мдя. Со стандартной библиотекой придётся повозиться. Уже сейчас сделано 4 списка: Слова, Предлоги, Атрибуты и Элементы - основной список в котором хранятся собственно классы, функции и переменные. Атрибуты пока вынес в отдельный список, т.к. они не выстроены в дерево и попросту засоряют просмотр дерева классов, отображаясь в корне как один длиннющий список. Пока делал поддержку стандартной библиотеки, всплыла куча нюансов с наследованием. Раньше наследование было занесено списком имён, а ссылки просто не заполнялись. Сейчас же понадобились эти ссылки, а там оказался бардак. Нужно немного переделать архитектуру дерева объектов.
Поделиться412014-09-22 10:13:26
Свежая выгрузка с исправлениями!
https://cloud.mail.ru/public/790c87d40252/tomdic.xml
Поделиться422014-09-22 22:04:32
Тут вот подумалось...
Все классы и прочие объекты в ст.библиотеке привязаны к словам.
Их код загружается при первом упоминании соответствующего слова.
В выгрузке я эту связь не учитываю, а может быть надо?
Поделиться432014-09-23 09:55:15
Все классы и прочие объекты в ст.библиотеке привязаны к словам.
Их код загружается при первом упоминании соответствующего слова.
В выгрузке я эту связь не учитываю, а может быть надо?
Надо. Из-за совпадения имён элементов в ст. библиотеке у меня уже были небольшие сложности. А если убрать слова из ст.библиотеки, то остальные элементы не будут совпадать именами?
Поделиться442014-09-23 10:07:52
А если убрать слова из ст.библиотеки, то остальные элементы не будут совпадать именами?
В ТОМе есть 3 пространства имён:
- слова и предлоги
- классы
- все остальные объектные значения
объекты, принадлежащие к разным пространствам, могут, а во многих случаях даже обязаны, совпадать по именам.
Поделиться452014-09-23 11:32:06
Аж целых три? Всё больше тайн открывается.
Сейчас в редакторе создано 10 типов элементов. Если сопоставить их с пространствами имён, то получится примерно следующее:
Класс = 2. классы
Слово = 1. слова и предлоги
Предлог = 1. слова и предлоги
Атрибут = ???
Локация = 3. остальные объектные значения
Объект = 3. остальные объектные значения
Функция = ???
Папка = <вне пространств>
Проект = <вне пространств>
Переменная = ???
Необходимо сопоставить все типы с пространствами имён, чтобы во-первых сделать проверку на уникальность имён, а во-вторых чтобы правильно построить дерево наследования.
Сейчас в редакторе наследование поддерживают следующие элементы: Класс, Атрибут, Локация, Объект, Функция, Переменная.
Наследоваться элемент, на сколько я понял, может от любого другого элемента, поддерживающего наследование. Но вот, например, классы и локации находятся в разных пространствах имён. Т.е. когда есть класс "корабль" и локация "корабль", и ещё одна локация создана с "cls = корабль", то от какого элемента она наследована?
И ещё, буквально сейчас заметил в выгрузке XML:
<fact>наличие признака <cls>факт</cls> <arg>все:видимое Обж#Ип, attribute Atr</arg> <code>...</code> </fact>
Но никакого объекта с именем "факт" нет, кроме слова. Так элементы могут наследоваться от слов?
Поделиться462014-09-23 12:05:57
Сейчас в редакторе создано 10 типов элементов. Если сопоставить их с пространствами имён, то получится примерно следующее:
Класс = 2. классы
Слово = 1. слова и предлоги
Предлог = 1. слова и предлоги
Атрибут = ???
Локация = 3. остальные объектные значения
Объект = 3. остальные объектные значения
Функция = ???
Папка = <вне пространств>
Проект = <вне пространств>
Переменная = ???
Класс = 2. классы
Слово = 1. слова и предлоги
Предлог = 1. слова и предлоги
Атрибут = 3. остальные объектные значения
Локация = 3. остальные объектные значения
Объект = 3. остальные объектные значения
Функция = <вне пространств>
Папка = <вне пространств>
Проект = <вне пространств>
Переменная = <вне пространств>
Имя функции не транслируется в код, это имя нужно исключительно для удобства поиска и редактирования.
Имя переменной может совпадать с именем любого объекта. При этом переменная перекрывает этот объект, поэтому эту возможность нужно использовать осторожно, только там где действительно необходимо.
Поделиться472014-09-23 12:15:57
Но никакого объекта с именем "факт" нет, кроме слова. Так элементы могут наследоваться от слов?
Это ошибка выгрузки.
С базе есть объект с именем "факт", выгрузку исправлю.
Поделиться482014-09-23 12:21:53
Т.е. когда есть класс "корабль" и локация "корабль", и ещё одна локация создана с "cls = корабль", то от какого элемента она наследована?
От класса.
Попытка наследовать от локации вызовет ошибку интерпретатора.
A is B //B тут всегда класс (или attribute, если A тоже attribute)
Поделиться492014-09-23 12:53:20
Свежая выгрузка с исправлениями:
https://cloud.mail.ru/public/790c87d40252/tomdic.xml
Добавил привязку к словам, вернул факт на место.
Поделиться502014-09-23 18:09:50
<class>человек <cls>@раса</cls> <cls>@раса</cls> <word>человек</word> <code>...</code> </class>
Тоже нехорошая подлянка.
Поделиться512014-09-23 20:18:19
Тоже нехорошая подлянка.
Угу, завтра поправлю.
Поделиться522014-09-25 19:40:33
Что-то никак не хватает мощности текущего редактора свойств чтобы сделать их красивое наследование. Пожалуй тоже уйду в рефакторинг и перепишу его немного по другому. Надеюсь, на пол года не затянется
Поделиться532014-09-25 20:00:25
Пожалуй тоже уйду в рефакторинг и перепишу его немного по другому. Надеюсь, на пол года не затянется
удачи! рефакторинг, он такой - затягивает
Не знаю, заметил ли ты, или еще нет: Свойства могут наследоваться от методов(секций), и наоборот. Пространство имён и синтаксис вызова у них одинаков.
Поделиться542014-09-25 20:27:19
Не знаю, заметил ли ты, или еще нет: Свойства могут наследоваться от методов(секций), и наоборот.
Под свойствами я подразумеваю переменные, описанные внутри объекта. Аналог в языках программирования - property. Либо я неправильно понял, либо именно они (переменные) могут наследоваться. Но как? Можно примерчик?
Что я действительно заметил, так это описание действий прям внутри конструктора классов:
<class>предмет <cls>@материальное</cls> <word>предмет</word> <code>var _вес = 0 action(_взятие, предмет Обж) { --execute-- Обж inside pers %ты взял {Обж*#Вп}. } var можно_выбросить = да action(_выбрасывание, предмет Обж) { --execute-- Обж inside loc %{pers} {выбросить*pers*#Пв} {Обж*#Вп}. } -- можно_взять -- this.проверка_видимости this.можно_потрогать if(this.pos==pers) fail, "{this} и так уже у тебя" if(this.pos is существо) fail, "{this.pos} не даст тебе {this*#Вп}" if(this part this.pos) fail, "{this} можно взять только вместе с {this.pos*#Тп}" if(this._вес > pers._макс_вес) fail, "слишком тяжело" Ok </code>
С секциями всё понятно, но функции то как там оказались?
Поделиться552014-09-25 20:52:24
Под свойствами я подразумеваю переменные, описанные внутри объекта. Аналог в языках программирования - property. Либо я неправильно понял, либо именно они (переменные) могут наследоваться. Но как? Можно примерчик?
перегружаться, а не наследоваться - так правильно =)
class A1{ var P = 5 } //тут P - свойство class A2 { is A1 -- P -- //тут P - метод 10 + 5 } class A3 { is A2 var P = 66 //тут P - опять свойство } A3 B{} //объект B %{B.P} //а тут нам безразлично, P свойство или P метод.
Поделиться562014-09-25 20:59:13
%{B.P} //а тут нам безразлично, P свойство или P метод.
Безразлично до тех пор, пока мы свойству/методу не попытаемся присвоить значение.
B.P = 65; // Если свойство - хорошо. А если метод?
А зачем их перегружать? Это ведь сильно усложняет дело. У меня сейчас мозг сломался, когда я мысленно попытался натянуть новую информацию на то, что уже сделано в редакторе.
Отредактировано Alexandr (2014-09-25 21:00:52)
Поделиться572014-09-25 21:06:11
Что я действительно заметил, так это описание действий прям внутри конструктора классов:
class предмет { ... action(_взятие, предмет Обж) { ... } ... }
абсолютно эквивалентно
class предмет { ... } action(_взятие, предмет Обж) { ... }
И да, такое вложение функций больше не будет нужно, т.к. появивись нормальные методы/секции.
Стандартную библиотеку я от них почищу.
Поделиться582014-09-25 21:17:01
Безразлично до тех пор, пока мы свойству/методу не попытаемся присвоить значение.
тоже безразлично:
B.P = 100500 //создаётся свойство P в объекте B со значением 100500
При операциях с объектами классы не изменяются!
A2.P = 100500 //метод P класса A2 замещается свойством P со значением 100500
С классами тоже нет проблем, при необходимости можно заменить метод свойством, но метод при этом убивается.
А зачем их перегружать? Это ведь сильно усложняет дело.
ООП, как же без этого?
Поделиться592014-09-25 21:23:54
У меня сейчас мозг сломался, когда я мысленно попытался натянуть новую информацию на то, что уже сделано в редакторе.
мб, секция объекта это просто новый тип свойства?
Поделиться602014-09-25 21:33:13
мб, секция объекта это просто новый тип свойства?
Не думаю, что это сработает. Метод это не просто какое-то там значение. Это целая горсть кода.
Что-нибудь придумаю, чтобы это распутать. Просто область рефакторинга расширилась полностью на редактор объектов.