PDA

Просмотр полной версии : Области видимости переменных


dark256
31.12.2010, 18:52
Что-то я почему-то не пойму, что я не так делаю:

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
Простые типы передаются по значению, а не по ссылке.

Можно как-нибудь так попробовать.
var TX = 1

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

RECALC( this )

trace( TX )

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
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
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
Немножко не то что надо. Функций должна пересчитывать произвольное поле в произвольном объекте.
То есть рабоатет вот такое:

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
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
Нет. Лушче всего, возвращать значение, как в посте #2 у udaaff.
Тут еще зависит от задачи. К примеру, если взять те же твины.

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