Форум 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=154733)

jester88 21.04.2011 16:04

Вытащить переменную из функции
 
Добрый день! Передо мной встала такая проблема. Нужно вытащить переменную из функции, которая выполняется по наступлению события. Вот код функции:
Код AS3:

public function dataReceived(event:DatagramSocketDataEvent):void
{
        for (var i:int = 0; i < event.data.length; i++)
        {
                var newData:int = event.data.readByte();
        }
}

В двух словах, эта функция выполняется по наступлению события DatagramSocketDataEvent, которое происходит, когда на сокет приходят данные по UDP. readByte() считывает поток байтов и конвертирует эти байты в некоторое число.
Подскажите, пожалуйста, что нужно сделать, чтобы переменная newData была видима за пределами этой функции.

bav 21.04.2011 16:12

Объявить ее за пределами функции.
Код AS3:

var someInt:int;
function changeSomeInt():void
{
    // Изменяем объявленную ранее переменную.
    someInt = 8;
}


jester88 21.04.2011 17:32

Так получится только если писать функцию в кадре, а потом вызвать ее в этом же кадре... У меня же функция находится внутри класса и вызывается по наступлению события, если прописать таким образом как написали Вы, то trace() выводит null, то есть:
Код AS3:

var newData:int;
public function dataReceived(event:DatagramSocketDataEvent):void
{
        newData = 8;
}
trace (newData)


carrotoff 21.04.2011 17:36

Цитата:

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

Bacrilio 21.04.2011 17:38

Конечно null вы же её ни разу не исполнили
Код AS3:

var newData:int;
public function dataReceived(event:DatagramSocketDataEvent):void
{
        newData = 8;
}
dataReceived(null)
trace (newData) // выдаст 8


goodguy 21.04.2011 17:41

Цитата:

Так получится только если писать функцию в кадре
С чего бы это? Из-за отсутствия модификатора доступа перед var чтоли?
С этим кодом точно все нормально, просто похоже трейс вызывается еще до назначения переменной
Код AS3:

var newData:int;
public function dataReceived(event:DatagramSocketDataEvent):void
{
        newData = 8;
    traceVar();
}
private function traceVar():void {
    trace (newData);
}

Вот этот код точно сработает нормально

jester88 22.04.2011 16:14

Спасибо огромное))


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

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