Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.03.2009, 20:25
Serious06 вне форума Посмотреть профиль Отправить личное сообщение для Serious06 Найти все сообщения от Serious06
  № 1  
Ответить с цитированием
Serious06

Регистрация: Jul 2008
Сообщений: 11
По умолчанию Динамическое создание переменных в экземпляре класса

Подскажите, как динамически создавать переменные классах?
Допустим, хочу, чтобы цикл создал (_parts) штук public переменных с именами ("_part"+i)
Код AS1/AS2:
class Cls {
	public var _parts;
 
	function Cls(parts) {
              _parts = parts;
              for(var i=0; i<_parts; i++) {
                     /* --- */
              }
	}
}
Такое возможно? Массивы не подходят, т.к. переменные - строки по 15000 символов, целевой девайс загибается от таких массивов. Пробовал без классов - работал метод set();

Старый 03.03.2009, 20:42
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 2  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Метод сет это тоже самое что = только древний. Класс нужно сделать динамическим тогда все будет работать.

Старый 03.03.2009, 21:06
Serious06 вне форума Посмотреть профиль Отправить личное сообщение для Serious06 Найти все сообщения от Serious06
  № 3  
Ответить с цитированием
Serious06

Регистрация: Jul 2008
Сообщений: 11
Отлично, заработало, создаю в конструкторе, видны внутри класса. А как сделать их public?
И еще вопрос, разве можно как-то без set() создать переменную с неизвестным заранее именем?

Старый 03.03.2009, 21:16
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вам наооборот нужно делать финты ушами, чтобы сделать ваши переменные private - используя ASSetPropFlags... и то это все равно будет условность... в АС2 нету приватных переменных.
__________________
Hell is the possibility of sanity

Старый 03.03.2009, 21:23
Serious06 вне форума Посмотреть профиль Отправить личное сообщение для Serious06 Найти все сообщения от Serious06
  № 5  
Ответить с цитированием
Serious06

Регистрация: Jul 2008
Сообщений: 11
В конструкторе:
Код AS1/AS2:
_part0 = "str";
trace("конструктор: "+_part0);
Во флешке:
Код AS1/AS2:
import Cls;
var tmp = new Cls(50);
trace("флешка: "+tmp._part0);
Вывод:
Код:
конструктор: str
флешка: undefined

Старый 03.03.2009, 21:26
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от qazwsx Посмотреть сообщение
Метод сет это тоже самое что = только древний. Класс нужно сделать динамическим тогда все будет работать.
топик по ас2: все классы динамические и публичные.
Код AS1/AS2:
class A {
function setDinamicProperties()
{
for(var i=0;i<10;i++)
this["dynamic_property"+i]=i;
}
}

Даже более того:
Код AS1/AS2:
b = new A();
b.dynamic_property11=11;
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 03.03.2009 в 23:10.
Старый 03.03.2009, 21:31
Serious06 вне форума Посмотреть профиль Отправить личное сообщение для Serious06 Найти все сообщения от Serious06
  № 7  
Ответить с цитированием
Serious06

Регистрация: Jul 2008
Сообщений: 11
О, спасибо, через this[] заработало!

Старый 03.03.2009, 21:35
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 8  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Вам наооборот нужно делать финты ушами, чтобы сделать ваши переменные private - используя ASSetPropFlags... и то это все равно будет условность... в АС2 нету приватных переменных.
Я ничего не понял . Кроме того что нету приватных переменных)(Хотя внешне то они недоступны :/).

Код AS1/AS2:
dynamic class Lolth
{
	public function Lolth()
	{
 
	}
 
	public function test(count:Number):Void
	{
		for (var i:Number = 0; i < count; i++)
		{
			this['variable' + i] = i;
		}
	}
}
 
var l:Lolth = new Lolth();
l.test(10);
trace(l.variable1);//1
Добавлено через 2 минуты
Цитата:
Сообщение от Котяра Посмотреть сообщение
топик по ас2 - все классы динамические и публичные.
Действительно :/. Правда если он не динами компилятор будет недоволен.

Старый 03.03.2009, 21:53
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Финт - сложный фокус с игральными картами, чтобы его сделать нужно одновременно двумя руками поменять карты в колоде так, чтобы остальные этого не заметили, сделать такой фокус ушами не возможно.
"Финты ушами" - значит, что то, что вы будете пытаться сделать в принципе не возможно, и при этом со стороны выглядит как очень трудноосуществимая задача.
Вы можете попытаться осуществить вашу задачу и через Object.addProperty() и через Object.watch() и через Object.__resolve(), но в конечном счете вы все равно прийдете к выводу, что содать содать свойство не видимое вне класса в АС2 не возможно.
__________________
Hell is the possibility of sanity

Старый 03.03.2009, 22:17
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 10  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
А если это будет getter. А в нем будет проверка равенства __proto__ и arguments.caller.__proto__? . Хотя конечно метод можно будет вызвать. Но нельзя будет просто получить его значение. Да и в принципе никому это нинадо. Вот в питоне например тоже нету в принципе приватных переменных и ничего. Еще бы можно было незная имен переменных получать их, для тестов бы пригодилось.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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