Неизменные наборы Actionscript 3

Когда вы просматриваете q[i].addr, еще не было выделено памяти для q[i].addr. Теперь все может произойти, потому что строка помещается в память, которая не принадлежит вам.

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

10
задан BefittingTheorem 1 March 2009 в 13:33
поделиться

4 ответа

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

Интерфейс IIterator, который я использую, смоделирован на Итераторе Java, но я не реализую удаление () метод, поскольку это считают ошибкой дизайна многие в сообществе Java, из-за него разрешающий пользователю удалить элементы массива. Ниже мой IIterator implemention:

 public interface IIterator
 {
     function get hasNext():Boolean
     function next():*
 }

Это затем реализовано классами, такими как ArrayIterator, VectorIterator и т.д.

Для удобства я также расширяю Прокси на своих конкретных классах Итератора и оказываю поддержку для циклов foreach в AS3 путем переопределения nextNameIndex () и nextValue () методы. Это означает код, который обычно использовал Массивы, не должен изменяться при использовании моего IIterator.

var array:Array = ["one", "two", "three"]

for each (var eachNumber:String in array)
{
    trace(eachNumber)
}

var iterator:IIterator = new ArrayIterator(array)

for each (var eachNumber:String in iterator)
{
    trace(eachNumber)
}

Только проблема... нет никакого способа для пользователя посмотреть на интерфейс IIterator и знать, что они могут использовать цикл foreach для итерации по набору. Они должны были бы посмотреть на реализацию ArrayIterator для наблюдения этого.

4
ответ дан 4 December 2019 в 04:01
поделиться

Некоторые утверждали бы, что то, что можно реализовать такие шаблоны как библиотеки, является аргументом против добавления опций на сам язык (например, разработчики языка C++ обычно говорят это).

0
ответ дан 4 December 2019 в 04:01
поделиться

У Вас есть неизменность, которую Вы хотите через объект прокси или нет? Отметьте, Вы можете сделать, чтобы конструктор VectorIterator взял обязательный параметр Класса. По общему признанию это не разработчик, дружелюбный в данный момент, но позволяет вещам надежды, улучшится в будущем.

0
ответ дан 4 December 2019 в 04:01
поделиться

I создали небольшую библиотеку неизменяемых классов коллекций для AS3, включая типизированный упорядоченный список, который звучит так, как будто он отвечает вашим потребностям. Подробнее см. в этом сообщении в блоге .

0
ответ дан 4 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: