Разве noun не наследуется? Кажется, я это уже применял - и все работало.
Но вот сейчас, когда я писал код для goraph, появился тупой глюк.
Итак, код простейший:
#include <advr.t> #include <stdr.t> #include <errorru.t> startroom: room sdesc = "Спальная комната" ldesc = "Единственная комната моей квартиры." ; vial: item location = nil sdesc = "пузырёк" rdesc = "пузырька" ddesc = "пузырьку" vdesc = "пузырёк" tdesc = "пузырьком" pdesc = "пузырьке" noun = 'пузырек' 'пузырька' 'пузырьку' 'пузырьком' 'пузырьке' 'пузырьку#d' 'пузырьком#t' ldesc = "На свету небольшой пузырёк длиной с палец поблескивает гранями." isHim = true ; vial1: vial location = startroom ;
Получаем:
>смотреть
Спальная комната
Единственная комната моей квартиры.
Ты видишь здесь пузырёк.
>взять пузырёк
Я не вижу здесь объект "пузырек".
>взять пузырек
Я не вижу здесь объект "пузырек".
>
Это что?
Пробовал с разными версиями русских библиотек.
Самое интересное, что если в наследнике явно прописать noun:
vial1: vial location = startroom noun = 'пузырек' 'пузырька' 'пузырьку' 'пузырьком' 'пузырьке' 'пузырьку#d' 'пузырьком#t' ;
то все прекрасно...
Неактивен
Надо написать
class vial: item
тогда все будет нормально. Тебе нужно понять разницу между классом объектов и экземпляром класса. Ты создал экземпляр класса item. А тебе надо создать класс-наследник от item.
Неактивен
Спасибо )
Я понимаю разницу между классом и экземпляром класса - просто не знал, что в TADS существуют классы как таковые. Меня ввела в заблуждение фраза, которую я где-то прочел, что в TADS нет разницы между классами и объектами. Этого человека надо найти и покарать
Неактивен
Hind написал:
Спасибо )
Я понимаю разницу между классом и экземпляром класса - просто не знал, что в TADS существуют классы как таковые. Меня ввела в заблуждение фраза, которую я где-то прочел, что в TADS нет разницы между классами и объектами. Этого человека надо найти и покарать
Чего его искать? Это я (правда, вместе с Майклом Робертсом;). Вот как это описано в оригинальном мануале:
In TADS, there is no distinction between classes and instances of classes, in that a class is also an object. Hence, data values as well as methods can be inherited from a parent object. In TADS, the only distinction between a class and a normal object is that a class object is ignored by the player command parser.
И перевод:
В TADS нет такого различия между классами и объектами, т. е. класс также представляет собой объект. Поэтому от родительского объекта/класса можно унаследовать как структуру данных, так и конкретные значения. Единственное различие между классом и обычным объектом в TADS заключается в том, что классы игнорируются синтаксическим анализатором команд игрока.
Еще одно различие, которое автор как-то упустил - это то, что лексические свойства наследуются только от классов (что, если задуматься, в целом логично). Я, правда, вообще наследованием лексики почти не пользуюсь - переписываю ее заново для каждого объекта.
Отредактировано uux (07.12.2007 01:26)
Неактивен
uux написал:
Чего его искать? Это я (правда, вместе с Майклом Робертсом;).
Ну, ты же только переводил в этом предложении, так что вина целиком на Робертсе ) Но он непогрешим по определению - как создатель TADS
fireton написал:
Меня больше удивило, что TADS позволяет наследование от экземпляра класса... Бред полный с точки зрения ООП.
Ну уж не больший бред, чем отсутствие инкапсуляции. Но авторы игр все же не программисты...
Неактивен
Ну уж не больший бред, чем отсутствие инкапсуляции. Но авторы игр все же не программисты...
Хм. Ты про то, что нельзя скрывать методы и свойства?
Неактивен
fireton написал:
Меня больше удивило, что TADS позволяет наследование от экземпляра класса... Бред полный с точки зрения ООП.
ООП бывают разные:) наследование можно расширенно трактовать как подобие. В этом случае наследование от экземпляра вполне допустимо.
Неактивен