Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не могу понять "Закрытие функции"... (http://www.flasher.ru/forum/showthread.php?t=128666)

p0okm 14.08.2009 13:16

Не могу понять "Закрытие функции"...
 
Извиняюсь за вопрос, но думаю, что многие по началу так же тупят как и я:(
Начал изучать 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 ?

random13 14.08.2009 13:29

а что здесь не так, помойму всё нормально

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

и так:

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

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

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

Felicast 14.08.2009 13:46

функция foo вернет на функцию rectArea
вызывая функцию myProduct(4), мы вызываем функцию rectArea(4)

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

aksios 14.08.2009 13:50

Смысл в том, что можно закоментировать:
Код 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 есть похожие буквы в названиях переменных не важно.

p0okm 14.08.2009 19:43

А зачем нужно было объявлять тип "Function" в функции "foo" и переменной "myProduct"?

2morrowMan 14.08.2009 20:27

Читайте внимательно:
Цитата:

...в следующем программном коде создаются две функции: foo(), которая возвращает вложенную функцию с именем rectArea()...

Felicast 14.08.2009 22:02

вообще, был приведен довольно плохой пример, из которого не совсем очевидно зачем это вообще может пригодится. да и названия типа 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


p0okm 15.08.2009 00:24

Цитата:

Сообщение от Felicast (Сообщение 842891)
вообще, был приведен довольно плохой пример, из которого не совсем очевидно зачем это вообще может пригодится. да и названия типа foo bar не добавляют понятности.
постараюсь попонятнее:

Ну что ADOBE дал то и пытаюсь понять:)

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

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

Felicast 15.08.2009 18:13

Цитата:

exe-зешник выходит размера немного больше чем mp3 файл
он содержит в себе flash player, поэтому много весит
Цитата:

пока лежит в каталоге куда я его публиковал воспроизводит звук, но как только я его перемещаю в другой каталог перестаёт работать
надо поменять настройки публикации flash установить тип безопасности в "Access local files only"

p0okm 17.08.2009 22:08

Цитата:

Сообщение от Felicast (Сообщение 843027)
он содержит в себе flash player, поэтому много весит

Просто я так понял, что в exe-зешнике MP3 должен быть внутри, раз он такой большой.

Цитата:

Сообщение от Felicast (Сообщение 843027)
надо поменять настройки публикации flash установить тип безопасности в "Access local files only"

При публикации FLASH у меня стоит "Access local files only", а при публикации в EXE никаких настроек нет.


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

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