Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как создать сеттер массива? (http://www.flasher.ru/forum/showthread.php?t=172943)

HardCoder 20.12.2011 17:27

Как создать сеттер массива?
 
Здравствуйте. Сабж. Возможно ли такое. Если да, то как? Возьмем, например, двухмерный массив:
Код AS3:

var _myArray:Array = new Array();
arr[2][2].foo = 20;
private function set arr():void{
 
}

Подскажите пожалуйста, что нужно писать в сеттере arr?

illuzor 20.12.2011 17:30

Во-первых, сеттер должен быть публичным, во-вторых - получать какое-то значение

Код AS3:

public function set arr(value:Array):void{
  _myArray = value;
}


HardCoder 20.12.2011 17:37

Цитата:

Сообщение от illuzor (Сообщение 1052624)
Во-первых, сеттер должен быть публичным

С каких это пор?
Цитата:

Сообщение от illuzor (Сообщение 1052624)
во-вторых - получать какое-то значение

Это я знаю. Я не знаю как эти значения передать в сеттер (именно массива).
Не пойму, какое отношение ваш код имеет к моему вопросу.
Код AS3:

var _myArray:Array = new Array();
arr[2][2].foo = 20;
private function set arr():void{
 //Здесь нужно чтобы _myArray[2][2].foo стало 20
}


GBee 20.12.2011 17:39

Вам не сеттер нужен, а геттер. Хотя я вообще не понимаю, чего вы хотите.
Код AS3:

var _myArray:Array = [[],[],[]];
private function get arr():Array
{
    return _myArray;
}
arr[2][2].foo = 20;


DaFive 20.12.2011 17:40

Что за такой сеттер массива и что он должен делать? Ну нипаняяятна же.

Inet_PC 20.12.2011 17:41

Цитата:

private function set arr():void{

}
Вам же сказали, что здесь ошибка.
Цитата:

не пойму, какое отношение ваш код имеет к моему вопросу.
Естесственно, в эту тему два телепата из другой еще не зашли. Упс, опоздал))
Цитата:

var _myArray:Array = new Array();
arr[2][2].foo = 20;
И это тоже работать не будет.

ChuwY 20.12.2011 17:41

Для такого обращения вам нужен не сеттер, а геттер.

Код AS3:

private function get arr():Array{
  return _myArray;
}


Опоздал.

HardCoder 20.12.2011 17:55

Цитата:

Сообщение от Inet_PC (Сообщение 1052631)
Цитата:

private function set arr():void{

}
Вам же сказали, что здесь ошибка.

Это не ошибка. Я нарочно упустил аргументы, потому что понятия не имею как их передать.
Представьте себе Класс на 1000 строк. В нем есть 2 массива _myArray1 и _myArray2. Структура массивов идентична (отличатся лишь типами содержащихся обьектов). При изменении елементов одного массива _myArray1 нужно изменить элементы с таким же индексом _myArray2. Тоесть массивы должны быть, как-бы, связаны друг с другом. Что же получается: 250 раз изменять один массив, и 250 раз изменять второй? Не проще ли создать функцию, которая при изменении одного будет изменять второй автоматически.

Добавлено через 5 минут
Хотя, да. Здесь никакой сеттер не пойдет, нужно писать функцию. Закрывайте

Inet_PC 20.12.2011 18:12

Код AS3:

private function setArrayValue(index: int, value:Object):void
{
_myArray1[index] = value;
_myArray2[index] = //делаем, что-то с этим элементом
}

Типа этого?
Я так понял Вы сначала, что-то долго делаете с первым массивом,
а потом хотите, чтобы подобные изменения отразились во втором, так? Тогда еще можно, как помечать в первом те элементы которые изменились и потом пробегаться по всем элементам и менять что-то во втором, но это будет менее производительно, чем функция выше.

HardCoder 20.12.2011 18:24

Цитата:

Сообщение от Inet_PC (Сообщение 1052640)
Я так понял Вы сначала, что-то долго делаете с первым массивом,
а потом хотите, чтобы подобные изменения отразились во втором, так?

Ну, наконец - то :).
Цитата:

Сообщение от Inet_PC (Сообщение 1052640)
Тогда еще можно, как помечать в первом те элементы которые изменились и потом пробегаться по всем элементам и менять что-то во втором, но это будет менее производительно, чем функция выше.

Да, согласен...


Часовой пояс GMT +4, время: 12:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.