Тема: in/as
Показать сообщение отдельно
Старый 18.07.2013, 01:24
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
in - есть два не связаных использования. for [each] (var in iterable) - форма записи цикла без явного создания итератора / всей остальной машинерии. Другой вариант - инфиксный оператор (от двух аргументов): member in collection - тестирует на вхождение member в collection.
Если бы вы его реализовывали в AS3, то получили бы что-то типа:

Код AS3:
function in(member:Object, collection:Object):Boolean {
    if (collection is Array) {
        return collection.indexOf(member) > -1;
    } else if (collection is Dictionary) {
        ...
    }
    // и т.д. для всех возможных вариантов коллекций
    // но, на самом деле реализация более эффективная
}
as - инфиксный оператор тестирующий на принадлежность объекта к предполагаемому классу или интерфейсу и возвращающий ссылку на него же, либо null, если объект не является реализацией класс / интерфейса.
Если бы вы его реализовывали в AS3, то получилось бы что-то в роде:

Код AS3:
function as(object:Object, type:Class):Object {
    if (object is type) {
        return object;
    } else {
        return null;
    }
}
__________________
Hell is the possibility of sanity