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

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

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

Регистрация: Dec 2006
Адрес: Россия, Пермь
Сообщений: 72
Отправить сообщение для Amra Kimmerian с помощью ICQ
По умолчанию Передача неопределенного количества аргументов

Здравствуйте.
Как обработать в функции неопределенное количество аргументов - понятно (The ... (rest) parameter).
А как передать в ф-ию неопределенное количество аргументов? Судя по хелпу эти аргументы составляют внутри нее массив:
Цитата:
This parameter allows you to specify an array parameter that accepts any number of comma- delimited arguments.
Пробовал создать и массив, и объект чтобы в качестве аргумента ф-ии указать его, но выдает ошибку. А необходимо передать в ф-ию заранее неизвестное количество аргументов.
Можно ли как то это сделать?
__________________
It shall be done.

Старый 19.12.2007, 18:47
VovkaMorkovka вне форума Посмотреть профиль Отправить личное сообщение для VovkaMorkovka Найти все сообщения от VovkaMorkovka
  № 2  
Ответить с цитированием
VovkaMorkovka
[+3 13.02.08]

Регистрация: Apr 2006
Сообщений: 421
Код:
function f(a:int=0,b:int=0)

Старый 19.12.2007, 18:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Там же есть наглядный пример. В чем проблема?

Старый 19.12.2007, 20:09
K.A.T.A.F.A.L.K.E.R вне форума Посмотреть профиль Отправить личное сообщение для K.A.T.A.F.A.L.K.E.R Найти все сообщения от K.A.T.A.F.A.L.K.E.R
  № 4  
Ответить с цитированием
K.A.T.A.F.A.L.K.E.R
 
Аватар для K.A.T.A.F.A.L.K.E.R

Регистрация: Jul 2005
Адрес: Go, Ukraine!
Сообщений: 787
Отправить сообщение для K.A.T.A.F.A.L.K.E.R с помощью ICQ
Код:
function test(...listofarguments){
	trace(listofarguments);
}
test(1,2,3)
в хелпе примеры действительно есть...
__________________
...я люблю людей!..

Старый 20.12.2007, 08:35
Amra Kimmerian вне форума Посмотреть профиль Отправить личное сообщение для Amra Kimmerian Найти все сообщения от Amra Kimmerian
  № 5  
Ответить с цитированием
Amra Kimmerian

Регистрация: Dec 2006
Адрес: Россия, Пермь
Сообщений: 72
Отправить сообщение для Amra Kimmerian с помощью ICQ
2 VovkaMorkovka. a и b - это не неопределенное количество аргументов, их число равно двум.

2 __etc. Да есть, даже два и в обоих вызов ф-ии такой:
Код:
traceArgArray(1, 2, 3);
Проблема в том что 1, 2 и 3 это последовательность из 3-х аргументов, но никак не неопределенное их количество.

2 K.A.T.A.F.A.L.K.E.R . Опять же вызов ф-ии:
Код:
test(1,2,3)
с однозначно определенным количеством аргументов - тремя.

Повторюсь: проблема не в том чтобы обработать в функции неопределенное количество аргументов, а проблема в том чтобы подать в ф-ию неопределенное количество аргуметов. Что то типа этого:
Код:
// создаем массив с объектами
var maxArgs:Number = 3;
var argsArray:Array = new Array();
for (var i:Number=0; i<maxArgs; i++) {
	var object:Object = new Object();
	argsArray[i]=object;
}
trace ("array all: "+argsArray); // array all: [object Object],[object Object],[object Object]
function traceArgArray(... args):void
{
    for (var i:uint = 0; i < args.length; i++)
    {
        trace("element "+i+" "+args[i]); 
    } 
}
// передаем массив в функцию
traceArgArray(argsArray); // element 0 [object Object],[object Object],[object Object]
Но, как видно, это не работает - переданный массив принимается как один первый аргумент (было бы ужасно если бы не так ).
Я не нашел в хелпе, как это можно сделать. Или я не вижу очевидного.
__________________
It shall be done.

Старый 20.12.2007, 09:22
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 6  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
Код:
traceArgArray.apply(this, argsArray)
Подойдёт ?
Вобще почитайте в хелпе про класс функции, полезно.
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©

Старый 20.12.2007, 09:54
Amra Kimmerian вне форума Посмотреть профиль Отправить личное сообщение для Amra Kimmerian Найти все сообщения от Amra Kimmerian
  № 7  
Ответить с цитированием
Amra Kimmerian

Регистрация: Dec 2006
Адрес: Россия, Пермь
Сообщений: 72
Отправить сообщение для Amra Kimmerian с помощью ICQ
Да! То что нужно. Обязательно почитаю. Спасибо miramax. Спасибо всем.
__________________
It shall be done.

Старый 20.12.2007, 10:26
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 8  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Цитата:
traceArgArray(argsArray);
Amra Kimmerian, ты говориш об передаче и обработке неопределенного количества аргументов, а сам же в своем примере передаеш только 1. Т.е. ты сам додумался как передать нужное количество аргументов(т.е. просто передать масив), не используя стандартного func(... args).

Старый 20.12.2007, 10:46
Amra Kimmerian вне форума Посмотреть профиль Отправить личное сообщение для Amra Kimmerian Найти все сообщения от Amra Kimmerian
  № 9  
Ответить с цитированием
Amra Kimmerian

Регистрация: Dec 2006
Адрес: Россия, Пермь
Сообщений: 72
Отправить сообщение для Amra Kimmerian с помощью ICQ
Да, 2morrowMan, так то оно так, но хотелось внутри ф-ии использовать именно "... args", потому как имею дело с большым проектом, в котором уже так написано и менять что то в нем хочется по минимуму.
__________________
It shall be done.

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

Регистрация: Aug 2007
Сообщений: 467
Цитата:
Сообщение от Amra Kimmerian
Да, 2morrowMan, так то оно так, но хотелось внутри ф-ии использовать именно "... args", потому как имею дело с большым проектом, в котором уже так написано и менять что то в нем хочется по минимуму.
Код:
function myFunc(... args):void {}
Это значит что ты можешь вызывать функцию myFunc() следующим образом:

1) myFunc();
2) myFunc(myParam);
3) myFunc(myParam1, myParam2, myParam3);
4) myFunc(myParam1, myParam2, myParam3, ..., myParamN);

где myParam может принимать любой тип(int, Number, String, Object и т.д.)


Вот так можно просмотреть переданные параметры:
Код:
function myFunc(... args):void
{
   for (var i:uint = 0; i < args.length; i++) trace(args[i]);
   // или
   // for each(var arg:* in args) trace(arg);
}


Последний раз редактировалось 2morrowMan; 20.12.2007 в 18:16.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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