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

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

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

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
По умолчанию Interface для... Function

(касается как as2, так и as3)
Каким образом задать тип ф-ции, являющейся аргументом ф-ции? Т.е. необходимо задать строгую типизации параметров. Нужно что-то вроде интерфейса для классов
пример:
Код AS3:
public function doFunction (f:Function, a:int,b:int):String
{
      return f(a,b); 
     // как задать, что f - ф-ция, 
     //принимающая 2 параметра (a:int,b:int), и возвращающая String?
}
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 21.10.2009 в 18:58.
Старый 21.10.2009, 10:42
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Есть правило - "один вопрос - одна тема".
Так что плодите.
Непонятен сам вопрос "задать тип функции". Это тип возвращаемого ей значения - как вообще его можно задать извне? Он зависит от того, что ф-ия возвращает оператором return, а не ф-ия возвращает то, что написано после двоеточия))))

Добавлено через 9 минут
Код AS1/AS2:
public function doFunction (f:Function, a:int,b:int):String
{
           var c:String = f(a,b).toString();
           return c; 
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 21.10.2009 в 14:11.
Старый 21.10.2009, 11:06
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 3  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Нужно что-то типа typedef. В ас такого нема. А сам тип Function вообще ни о чем не говорит.

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

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Непонятен сам вопрос "задать тип функции". Это тип возвращаемого ей значения - как вообще его можно задать извне? Он зависит от того, что ф-ия возвращает оператором return, а не ф-ия возвращает то, что написано после двоеточия))))

Добавлено через 9 минут
Код AS1/AS2:
public function doFunction (f:Function, a:int,b:int):String
{
           var c:String = f(a,b).toString();
           return c; 
}
"задать тип ф-ции" имелось ввиду задать некий интерфейс ф-ции, т.е. что в качестве параметра f ожидается ф-ция вида function f(a:int,b:int):String и никакая другая.
т.е. ф-ция f - должна реализовывать некий интерфейс.
тогда использование может выглядеть где-то так:
Код AS3:
public function doFunction (f:IFunction, a:int,b:int):String
{
           var c:String = f(a,b).toString();
           return c; 
}
В чистом виде такого в АS нет, может как-то извернуться можно?
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 21.10.2009 в 19:04.
Старый 22.10.2009, 01:50
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 5  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
В AS, в т.ч. AS3, такого сделать не получится. Можно, конечно, как-нибудь извратиться, но это не будет ни красиво, ни быстро.

А чем, кроме проверки на этапе компиляции, не устраивает вариант, предложенный Wolsh?

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Проголосуй!
http://bugs.adobe.com/jira/browse/ASC-3853


Да, что я делаю, если ну оооочень надо, а производительность не важна:
Код AS3:
public class FunctionInterface extends AbstractDelegate {
public function FunctionInterface(method:Function, param1:Type1, param2:Type2 ... paramN:TypeN)
{
super(method);
....
}
public override function call():* // увы...
{
return super._metod(param1, param2, ... paramN);
}
Цитата:
Сообщение от SamFR Посмотреть сообщение
В AS, в т.ч. AS3, такого сделать не получится. Можно, конечно, как-нибудь извратиться, но это не будет ни красиво, ни быстро.

А чем, кроме проверки на этапе компиляции, не устраивает вариант, предложенный Wolsh?
Что интересно, вполне может быть, что в AS2 как раз получится Лень пробовать, но, сколько мне память не изменяет, в AS2 можно было наследоваться от всех классов, Function в том числе
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 22.10.2009 в 02:48.
Старый 22.10.2009, 03:18
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 7  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
то что Вы тут обсуждаете называет сигнатура. это там в каких-то зачатках есть в ES, но в AS ни в каких нету ( увы. тоже очень хочется.

Старый 22.10.2009, 11:37
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 8  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
А как насчет такого изврата:

Код AS3:
public function doFunction (f:Function, a:int,b:int):String
{
 
     var q:Funtion = function(a:int, b:int):String
     {
         return f(a,b)
     }
 
     return q(a,b)
 
}
А, прочитал все дальше первого поста и понял, что это не то, что нужно Но можно там вставить try catch и кидать ValueError при несоответствии типов аргументов или возвращаемого значения.
__________________
Дело не в тебе


Последний раз редактировалось AL.exe; 22.10.2009 в 11:43.
Старый 22.10.2009, 14:22
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 9  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Если такая штука нужна только в некоторых компонентах приложения, их можна на haXe вообще написать, т к там это есть.
Я пишу для себя комментарии просто в коде, чтобы все это было под рукой, плюс упоминаю в asDoc комментариях.
Код AS3:
function a(b:Function/*int,int->void*/){...}
__________________
4am is time to rock

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вобщем, я вижу только одно решение - создавать классы для каждой функции.
Класс Func1, класс Func2, класс Func3...
Все эти классы поддерживают интерфейс IFunc, который предписывает им иметь метод func(a:int, b:int):String
И тогда -
Код AS1/AS2:
public function doFunction (f:IFunc, a:int,b:int):String 
{ 
    return f.func(a, b) 
}
__________________
Reality.getBounds(this);

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

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

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


 


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


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