Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
24.10.2007 16:39

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Как узнать принадлежность объекта к списку?

Можно ли упростить конструкцию вида:
if (Me.location = room1 or Me.location = room2 or ...)
?

Например, быстро проверив принадлежность объекта Me.location к списку комнат?
Способ с циклом очевиден, но, может быть, язык предлагает лучший инструмент?
Заранее извиняюсь, если вопрос глупый.

Спасибо smile

Отредактировано Hind (24.10.2007 16:40)

Неактивен

0    0    #2
24.10.2007 19:28

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Как узнать принадлежность объекта к списку?

В общем, пока решил проблему созданием пустого класса, а нужные комнаты сделал потомками в том числе этого класса... Конкретно в моем случае нужно было проверять радиодосягаемость, скажем так, жучка )

radioroom: room
;

...
if (isclass (Me.location, radioroom)
...

Но ответ о средствах языка хотелось бы все же услышать smile

Неактивен

0    0    #3
24.10.2007 20:56

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Как узнать принадлежность объекта к списку?

Hind написал:

Можно ли упростить конструкцию вида:
if (Me.location = room1 or Me.location = room2 or ...)
?

Например, быстро проверив принадлежность объекта Me.location к списку комнат?
Способ с циклом очевиден, но, может быть, язык предлагает лучший инструмент?

Имеется встроенная функция find, которая ищет элемент в списке или подстроку в строке и возвращает порядковый номер элемента в списке (или nil, если он не найден).

В Вашем случае оно могло бы работать так:

Код:

local RoomList;
RoomList:=[room1 room2 room3 room4 room5 room6]
if(find(RoomList, MyRoom)<>nil)
  {...
  }

При этом, если MyRoom равна room3, функция вернет 3, а если MyRoom отсутствует в RoomList, то nil.

Hind написал:

Заранее извиняюсь, если вопрос глупый.

Эх... Хотел было побрюзжать на тему "читайте мануал, господа", но вспомнил, что эта глава еще не переведена;).

Неактивен

0    0    #4
24.10.2007 21:25

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Как узнать принадлежность объекта к списку?

Ага, спасибо! Проблема была именно с неизвестностью названия функции, а читать на инглише весь ман по языку таки утомительно...

find

Call: find(value, target)
If value is a list; the function returns the offset (starting at 1 for the first element) in the list of the target item within the value list. If the target is not found, nil is returned. For example, find([4 5 6], 5) returns 2.

Неактивен

0    0    #5
28.10.2007 15:01

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Как узнать принадлежность объекта к списку?

Лично мне вариант решения проблемы с помощью наследования кажется естественнее. Такой подход используется повсеместно в библиотеке adv.t, и я пользуюсь именно таким подходом. Только для проверки использую не is_class (), а флаг в родительском классе, и его проверку:

Код:

radioroom: room
isRadioroom = true;
;

if (parserGetMe().location.isRadioroom)
    ...

По умолчанию все неописанные свойства объекта имеют значения nil.

Отредактировано Gremour (28.10.2007 15:02)

Неактивен

0    0    #6
28.10.2007 16:33

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Как узнать принадлежность объекта к списку?

Gremour написал:

Лично мне вариант решения проблемы с помощью наследования кажется естественнее.

В данном конкретном случае да, но есть задачи, которые удобнее решать именно проверкой списка, и вот тут-то функция find крайне полезна...

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru