Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Области видимости переменных (http://www.flasher.ru/forum/showthread.php?t=148440)

dark256 31.12.2010 18:52

Области видимости переменных
 
Что-то я почему-то не пойму, что я не так делаю:

Код AS1/AS2:

var TX = 1
 
function RECALC( ARG )
{
        trace( ARG )
        ARG = 100
        trace( ARG )
}
 
RECALC( TX )
 
trace( TX )

Получаем:
1
100
1

Как мне получить
1
100
100

??? :)

udaaff 31.12.2010 18:53

Простые типы передаются по значению, а не по ссылке.

Можно как-нибудь так попробовать.
Код AS1/AS2:

var TX = 1
 
function RECALC( ARG )
{
        trace( ARG )
        ARG.TX = 100
        trace( ARG )
}
 
RECALC( this )
 
trace( TX )

Код AS1/AS2:

var TX = 1
 
function RECALC( ARG ):Number
{
        trace( ARG )
        ARG = 100
        trace( ARG )
        return ARG;
}
 
TX = RECALC( TX )
 
trace( TX )


dark256 31.12.2010 18:55

Код AS1/AS2:

var TX:Object = new Object()
TX.field = 1
 
function RECALC( ARG )
{
        trace( ARG )
        ARG = 100
        trace( ARG )
}
 
RECALC( TX.field )
 
trace( TX.field )

1-100-1

Вроде уже не простой тип :) А КАК же правильно написать-то код? :)

udaaff 31.12.2010 18:57

Код AS1/AS2:

var TX:Object = new Object()
TX.field = 1
 
function RECALC( ARG )
{
        trace( ARG )
        ARG.field = 100
        trace( ARG )
}
 
RECALC( TX )
 
trace( TX.field )


dark256 31.12.2010 19:00

Немножко не то что надо. Функций должна пересчитывать произвольное поле в произвольном объекте.
То есть рабоатет вот такое:

Код AS1/AS2:

var TX:Object = new Object()
TX.field = 1
 
function RECALC( ARG ){
        TX[ARG] = 100
}
 
RECALC( "field" )
 
trace( TX.field )

Но тогда вопрос, как передать еще и имя объекта, то есть "TX" ?

udaaff 31.12.2010 19:01

Передавайте не имя, а ссылку на сам объект.

dark256 31.12.2010 19:02

Аммм.... а кусочком кода проиллюстрировать? Я что-то совсем запутался уже :)

udaaff 31.12.2010 19:03

Код AS1/AS2:

var TX:Object = new Object()
TX.field = 1
 
function RECALC(object:Object, ARG:String ){
        object[ARG] = 100
}
 
RECALC( TX, "field" )
 
trace( TX.field )


dark256 31.12.2010 19:06

Ага! Во. Да. Хм.... Но как-то несколько коряво, нет?
То есть я не в коем случае не критикую, но как-то оно некрасиво выглядит... хм?
Это нормальная практика имено ТАК работать?
Уже просто теоретически интересно :)

udaaff 31.12.2010 19:11

Цитата:

Функций должна пересчитывать произвольное поле в произвольном объекте.
Вполне соответствует условию.
Других нормальных способов не знаю.

iflamberg 31.12.2010 19:14

Нет. Лушче всего, возвращать значение, как в посте #2 у udaaff.

dark256 31.12.2010 19:15

Ага. Все равно спасибо. А то у меня тут разжижение мозгов потихоньку чуть не началось.
Но раз кто-то думает актже как я - мы с ним похожи точь в точь (с)АлисА

:) Спасибо и с НАСТУПАЮЩИМ!

udaaff 31.12.2010 19:24

Цитата:

Сообщение от iflamberg (Сообщение 961277)
Нет. Лушче всего, возвращать значение, как в посте #2 у udaaff.

Тут еще зависит от задачи. К примеру, если взять те же твины.

dark256 31.12.2010 21:44

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


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

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