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

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

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

Регистрация: May 2009
Сообщений: 34
По умолчанию Не могу понять "Закрытие функции"...

Извиняюсь за вопрос, но думаю, что многие по началу так же тупят как и я
Начал изучать ActionScript 3, обратился к первоисточнику к документации от Adobe.
Скачал их "Программирование на ADOBE ® ACTIONSCRIPT® 3.0", но пока очень туго идёт
Вот например фрагмент со страницы 98 ...
Цитата:
Например, в следующем программном коде создаются две функции: foo(), которая возвращает вложенную
функцию с именем rectArea(), рассчитывающую площадь прямоугольника, и функцию bar(), вызывающую
foo() и сохраняющую возвращаемое закрытие функции в переменной с именем myProduct. Несмотря на то,
что функция bar() определяет свою собственную локальную переменную x (со значением 2), если вызывается
закрытие функции myProduct(), она сохраняет переменную x (со значением 40), определенную в функции
foo(). Функция bar(), таким образом, возвращает значение 160 вместо 8.

Код AS3:
function foo():Function
{
var x:int = 40;
function rectArea(y:int):int // function closure defined
{
return x * y
}
return rectArea;
}
function bar():void
{
var x:int = 2;
var y:int = 4;
var myProduct:Function = foo();
trace(myProduct(4)); // function closure called
}
bar(); // 160

2 дня читаю но понять не могу и они ни словом
о том зачем и почему "function foo():Function" функции "foo" присваивают тип "Function" хотя
судя по листингу "var myProduct:Function = foo();" это прямо связано с типом переменной
в функции "bar" .
Кто нибуть может понятно объяснить этот фрагмент руководства от ADOBE ?

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
а что здесь не так, помойму всё нормально

единственное не лучший стиль програмирования в данном примере но это уж на любителя...

и так:

есть функция bar которая создает три переменных

две типа int и одна функция, как известно переменной можно присвоить функцию а точнее получим результат выполнения функции, если не ошибаюсь

есть функция foo которая содержит в себе переменную типа int а так же объявление вложенной функции которая в последствие возвращается ну а дальше уже расчеты, результат понятен как считается или пояснить?

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

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
функция foo вернет на функцию rectArea
вызывая функцию myProduct(4), мы вызываем функцию rectArea(4)

зы: в данном случае это просто ужасно, однако иногда довольно-таки полезно
__________________
я могу стать всем, если только захочу

Старый 14.08.2009, 13:50
aksios вне форума Посмотреть профиль Отправить личное сообщение для aksios Найти все сообщения от aksios
  № 4  
Ответить с цитированием
aksios
loading 50%
 
Аватар для aksios

Регистрация: Jun 2005
Адрес: I am where I should be
Сообщений: 3,567
Отправить сообщение для aksios с помощью ICQ
Смысл в том, что можно закоментировать:
Код AS3:
function foo():Function
{
var x:int = 40;
function rectArea(y:int):int // function closure defined
{
return x * y
}
return rectArea;
}
function bar():void
{
//var x:int = 2;
//var y:int = 4;
var myProduct:Function = foo();
trace(myProduct(4)); // function closure called
}
bar(); // 160
- В функции bar созданы 3 переменных, одна из них объект типа функции.
Так вот, две другие переменных никакого отношения к этой третьей не имеют.
То, что внутри функции foo есть похожие буквы в названиях переменных не важно.

Старый 14.08.2009, 19:43
p0okm вне форума Посмотреть профиль Отправить личное сообщение для p0okm Найти все сообщения от p0okm
  № 5  
Ответить с цитированием
p0okm

Регистрация: May 2009
Сообщений: 34
А зачем нужно было объявлять тип "Function" в функции "foo" и переменной "myProduct"?

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

Регистрация: Aug 2007
Сообщений: 467
Читайте внимательно:
Цитата:
...в следующем программном коде создаются две функции: foo(), которая возвращает вложенную функцию с именем rectArea()...
__________________
Лучше быть умным и иногда делать глупости, чем глупым и постоянно умничать!

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

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
вообще, был приведен довольно плохой пример, из которого не совсем очевидно зачем это вообще может пригодится. да и названия типа foo bar не добавляют понятности.
постараюсь попонятнее:
Код AS3:
function getNeededFunction(type:int):Function
{
	if (type == 1)
	{
		return function add(a:int, b:int):int
		{
			return a + b;
		}
	}
	else if (type == 2)
	{
		return function multiplicat(a:int, b:int):int
		{
			return a * b;
		}
	}
}
 
var func1:Function = getNeededFunction(1);
var func2:Function = getNeededFunction(2);
 
trace(func1(8, 5)); //13
trace(func2(8, 5)); //40
__________________
я могу стать всем, если только захочу

Старый 15.08.2009, 00:24
p0okm вне форума Посмотреть профиль Отправить личное сообщение для p0okm Найти все сообщения от p0okm
  № 8  
Ответить с цитированием
p0okm

Регистрация: May 2009
Сообщений: 34
Цитата:
Сообщение от Felicast Посмотреть сообщение
вообще, был приведен довольно плохой пример, из которого не совсем очевидно зачем это вообще может пригодится. да и названия типа foo bar не добавляют понятности.
постараюсь попонятнее:
Ну что ADOBE дал то и пытаюсь понять

Felicast - огромное спасибо, так действительно становится понятно!

И ещё, правда не в тему, делал тесты с soundом всё работает, но когда публикую в exe происходит какая то непонятка, exe-зешник выходит размера немного больше чем mp3 файл и пока лежит в каталоге куда я его публиковал воспроизводит звук, но как только я его перемещаю в другой каталог перестаёт работать. mp3 файл я затаскивал с помощью URLRequest и для SWF всё логично, поменялся путь вот и не работает, но для exe-зешника как то не понятно, он же вроде всё в себя затащил отчего и стал по размеру как ауди-файл, почему он от пути зависит не пойму?


Последний раз редактировалось p0okm; 15.08.2009 в 00:37.
Старый 15.08.2009, 18:13
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 9  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
exe-зешник выходит размера немного больше чем mp3 файл
он содержит в себе flash player, поэтому много весит
Цитата:
пока лежит в каталоге куда я его публиковал воспроизводит звук, но как только я его перемещаю в другой каталог перестаёт работать
надо поменять настройки публикации flash установить тип безопасности в "Access local files only"
__________________
я могу стать всем, если только захочу

Старый 17.08.2009, 22:08
p0okm вне форума Посмотреть профиль Отправить личное сообщение для p0okm Найти все сообщения от p0okm
  № 10  
Ответить с цитированием
p0okm

Регистрация: May 2009
Сообщений: 34
Цитата:
Сообщение от Felicast Посмотреть сообщение
он содержит в себе flash player, поэтому много весит
Просто я так понял, что в exe-зешнике MP3 должен быть внутри, раз он такой большой.

Цитата:
Сообщение от Felicast Посмотреть сообщение
надо поменять настройки публикации flash установить тип безопасности в "Access local files only"
При публикации FLASH у меня стоит "Access local files only", а при публикации в EXE никаких настроек нет.

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

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

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


 


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


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