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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.06.2012, 20:54
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 11  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Но при таком вызове пропадает типизация, может стоит так:
Код AS3:
public interface IStaticClass
{
     function call():void;
}
public class SomeClass
{
     public static function someStaticFunction():void
     {
          //...
     }
}
 
public class SomeStaticClassProxy implements IStaticClass
{
     public function call():void
     {
          SomeStaticClass.someStaticFunction();
     }
}
 
function thatCallStatic(value:IStaticClass):void
{
     value.call();
}
 
thatCallStatic(new SomeStaticClassProxy());
Да многовато получается. Присоединяюсь к вопросу зачем нужно вызывать функцию так?
Цитата:
Ну, например, если класс передаётся в качестве параметра в какую-нибудь функцию.
Можно пример такой функции? Не представляю зачем нужно передавать класс Math, что бы кто-то так вызывал у него функцию cos?
Вообще по идее статические функции для это не предназначены.
__________________
http://www.chessmax.ru

Старый 09.06.2012, 21:12
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 12  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
Inet_PC, мне однажды такое понадобилось

Код AS3:
if ( importedClass["init"])
{
  importedClass["init"]();
}

Старый 09.06.2012, 21:12
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 13  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
В моем случае, в классах содержаться наборы параметров, соответственно назначая переменной ссылку на класс мы получаем доступ через эту переменную к параметрам. Собственно, можно было бы поместить в переменную экземпляр класса, но зачем плодить объекты?

Или например вот в этом видео по патерну Стратегия, мужик использует в качестве ссылок на классы стратегий экземпляры классов, хотя по идее это избыточное дублирование объектов.


Последний раз редактировалось PlutDem; 09.06.2012 в 21:17.
Старый 09.06.2012, 22:05
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 14  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
if ( importedClass["init"])
{
importedClass["init"]();
}
Можно хотябы кратко пояснить, что в этом init происходило? И по идее эта функция должна была быть вызвана только тогда, когда передали класс по ссылке куда-то или просто функция которая должны была хоть раз вызвана?

Цитата:
В моем случае, в классах содержаться наборы параметров, соответственно назначая переменной ссылку на класс мы получаем доступ через эту переменную к параметрам. Собственно, можно было бы поместить в переменную экземпляр класса, но зачем плодить объекты?
Кто говорит про плодить объекты? Сделайте статическую private/protected переменную и в ней храните Ваши параметры, а у объектов просто геттер и не нужно ничего плодить и все это дело еще и заинтерфейсить можно.
Цитата:
Или например вот в этом видео по патерну Стратегия, мужик использует в качестве ссылок на классы стратегий экземпляры классов
Вообще не увидел не типизированный вызов статической функции в этом видео.
Цитата:
, хотя по идее это избыточное дублирование объектов.
Действительно зачем нам избыточное дублирование (кстати где Вы там увидели дублирование?) объектов, давайте по старинке все в одном классе, хотя о чем это я, в одном кадре. Не уж-то Вам лень написать "лишний" класс, чтобы код стал читабельней, а количество ошибок уменьшилось?
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 09.06.2012 в 22:08.
Старый 09.06.2012, 22:18
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 15  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от PlutDem Посмотреть сообщение
в классах содержаться наборы параметров, соответственно назначая переменной ссылку на класс мы получаем доступ через эту переменную к параметрам.
Но ведь в статической функции, вы не сможете обратиться к не статическим свойствам класса. Ведь в статической функции любой доступ через this, не разрешается.

Старый 09.06.2012, 22:22
PlutDem вне форума Посмотреть профиль Отправить личное сообщение для PlutDem Найти все сообщения от PlutDem
  № 16  
Ответить с цитированием
PlutDem
 
Аватар для PlutDem

Регистрация: Feb 2012
Сообщений: 212
Inet_PC
Пример из видео:
Код AS3:
viking.moveBehavior = new Walk();
В переменную moveBehavior помещается экземпляр стратегии Walk. При множестве викингов со стратегией Walk будут излишне дублироваться экземпляры этого класса стратегии. Этого можно избежать если назначать moveBehavior не экземпляр, а ссылку на класс Стратегии.
Цитата:
Сообщение от samana Посмотреть сообщение
Но ведь в статической функции, вы не сможете обратиться к не статическим свойствам класса. Ведь в статической функции любой доступ через this, не разрешается.
А там и нету не статических свойств.


Последний раз редактировалось PlutDem; 09.06.2012 в 22:25.
Старый 09.06.2012, 22:25
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 17  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
В переменную moveBehavior помещается экземпляр стратегии Walk. При множестве викингов со стратегией Walk будут излишне дублироваться экземпляры этого класса стратегии.
Ну так это же просто пример.
Цитата:
Этого можно избежать если назначать moveBehavior не экземпляр, а ссылку на класс Стратегии.
Не обязательно. Кто Вам мешает один и тот же экземпляр класса Walk передать разным классам Vehicle? Если передавать класс, то получается два варианта: 1) каждый vehicle создает себе экзмепляр переданного класса, и мы получаем то, от чего ушли 2) есть статический метод move который и вызывается (не типизированно!!!). Но это тоже не вариант. На видео простой пример и там только одна функция move, а в жизни часто нужно гораздо больше функций и более того нужно хранить какие-то состояния, и как Вы собираетесь их хранить в статической функции не понятно... Ну наверное искрутиться можно будет, но зачем штаны через голову одевать?
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 09.06.2012 в 22:31.
Старый 09.06.2012, 22:56
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 18  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
Цитата:
Сообщение от Inet_PC Посмотреть сообщение
Можно хотябы кратко пояснить, что в этом init происходило? И по идее эта функция должна была быть вызвана только тогда, когда передали класс по ссылке куда-то или просто функция которая должны была хоть раз вызвана?
Большой проект, много разработчиков, динамическая подгрузка непойми-каких классов, в некоторых есть статичный init, который надо бы вызвать. В некоторых нет. Т. к. никто не знает, когда функция есть, когда нет, её пытаются вызывать всегда

Старый 09.06.2012, 23:00
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 19  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
Т. к. никто не знает, когда функция есть, когда нет, её пытаются вызывать всегда
Ну я так понимаю, что она вызывалась перед тем как использовать класс? или без разницы лишь бы хоть раз была вызвана? Или с экземплярами класса работали, а потом в нужный момент вызывался init и потом опять работали?
__________________
http://www.chessmax.ru

Старый 09.06.2012, 23:11
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 20  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
>Ну я так понимаю, что она вызывалась перед тем как использовать класс? или без разницы лишь бы хоть раз была вызвана? Или с экземплярами класса работали, а потом в нужный момент вызывался init и потом опять работали?

Если не вызвать эту функцию, то возникали какие-то неведомые внутренние ошибки. Зачем и почему, никто не знает, но её надо было вызвать перед использованием

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

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

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


 


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


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