Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   getter и массив (http://www.flasher.ru/forum/showthread.php?t=202690)

Akopalipsis 02.08.2013 02:34

getter и массив
 
Один раз я уже сталкивался с идентичной ситуацией, но это было в самом начале моего знакомства и получив образный ответ, я даже сейчас его не понимаю, по этому и спрашиваю повторно. Как работает сеттер?
вот код для примера:
Код AS3:

package  
{
        public class ClassGetSet
        {
                private var _string:Vector.<Array> = new Vector.<Array>;
 
                public function set text(value:Vector.<Array>):void
                {
                        trace('setter');
                        this._string = value;
                }
                public function get text():Vector.<Array>
                {
                        trace('getter');
                        return this._string;
                }
 
 
        }
 
}

Код AS3:

var getSet:ClassGetSet = new ClassGetSet();
getSet.text.push(['zzz']);

Почему в таком виде сеттер не срабатывает? Ведь значение ему поступают из параметров и уже потом в теле
присваиваются. Значит тело срабатывает.

Wolsh 02.08.2013 02:52

Код AS3:

getSet.text.push('zzz');

У Вас же Вектор стрингов, а не массивов? Так почему Вы добавляете в него массив?

Akopalipsis 02.08.2013 03:00

Цитата:

У Вас же Вектор стрингов, а не массивов?
я ошибся, исправил.

Wolsh 02.08.2013 03:09

У меня все работает.

Akopalipsis 02.08.2013 03:49

Цитата:

У меня все работает.
Работает и у меня, то есть значение присваивается, но мне хотелось бы узнать, почему трейс в теле сеттера не срабатывает.

olexandr 02.08.2013 04:09

Код AS3:

                private var _text:String = "";
                private var _arr:Array = [];
 
                public function Main():void {
                        text += "1";
                        arr.push(1);
                }
 
                public function get text():String {
                        trace( "get string" );
                        return _text;
                }
 
                public function set text(value:String):void {
                        trace( "set string");
                        _text = value;
                }
 
                public function get arr():Array {
                        trace( "get array" );
                        return _arr;
                }
 
                public function set arr(value:Array):void {
                        trace( "set array");
                        _arr = value;
                }

Как и положено, выводится:
Код AS3:

get string
set string
get array

То есть, при обращении к объекту вызывается геттер, а при записи в него вызывается сеттер

Wolsh 02.08.2013 09:19

Цитата:

мне хотелось бы узнать, почему трейс в теле сеттера не срабатывает.
Потому что сеттер нигде не вызывается.
getSet.text /*получили ссылку на Вектор*/.push(['zzz']) /*Добавили В ЭТОТ ВЕКТОР новый элемент*/;
Где Вы видите вызов сеттера set text() задающего НОВЫЙ Вектор?

Akopalipsis 02.08.2013 16:26

Не совсем значит до сего дня я понимал, что такое сеттер. Спасибо Вам за помощь!


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

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