Ruby @ восходящее солнце

кстати, чуть чуть оффтоп: у меня есть простой для себя признак что я освоился с проектом - это когда я перестаю запускать mc :)
 
Лучше мне пусть кто-нибудь объяснит, а нафига вообще нужны замыкания.
Мне в PHP всегда нравился подход к области видимости, отличный от традиционного - мы по умолчанию ограничены видимостью локальной, а для доступа к глобальным переменным декларируем такую нужду отдельно. Это усиливает контроль.

closures тут играют в обратную сторону + развивают процедурный подход, в противовес последним тенденциям движения в сторону ООП.

Мне кажется, в пхп стоило бы внедрить анонимные классы по аналогии с явой.

Не nested classes, а именно анонимные.

-~{}~ 18.03.10 01:50:

P.S. Делать сайты на яве - имхо извращение. Впрочем, они уже вымерли в большинстве.
На форуме javatalks.ru всё админы грозятся перейти с phpBB на явовский движок, по идеологическим соображениям, но воз и ныне там )))
Очень показательно :)
 
нафига вообще нужны замыкания.
Для создания хаоса :) Это все тянется из тех времен когда ооп не было. Вместо этого были грязные хаки, заменяющие полиморфизм и инкапсуляцию (ссылки-указатели на функции а-ля колбеки + глобалы с которыми проблемы). Потом у какого-то гавнакодера родилась гениальная идея - обозвать это все замыканиями и лямбда функциями. А чо, звучит круто. Буд-то и не про гавнакод, гы гы.
 
Зачем нужны?
Ну вот, например (php считать псевдокодом):
PHP:
class DatabaseConnection {

    public function transactionWith(Closure $func) {
        $this->begin();
        try {
            $func();
            $this->commit();
        } catch (Exception $E) {
            $this->rollback();
            throw $E;
        }
    }

}

//....

class FooModel {

    public function registerUser() {

        $this->Db->transactionWith(function() {
            $this->Db->query(....);
            $this->Db->query(....);
            $this->Db->query(....);
        });

    }
}
 
Это не замыкание.

-~{}~ 18.03.10 03:59:

В однопоточных приложениях замыкания нужны как корове седло.
 
Хехе, а мне более нравится делать так:

Код:
UserServiceImpl
{
   @Transactional
   public void registerUser(User user)
   {
      ...
   }
}

Насчет замыканий в java вот статья: http://bitsofmind.wordpress.com/2008/01/15/future_closures_for_java/

Но это все же не ключевая фича, скорее из разряда syntax sugar, имхо.

p.s. Для ФЯПфагов можно посмотреть scala & groovy.
 
Автор оригинала: whirlwind
Это не замыкание.
и здрасьте! а что же это?
тут только одно отличие от классического замыкания - что объявление "связи" и собственно вызов синхронны
 
Sherman, ага, АОП дает вариант ничуть не хуже.

А пример этот я взял не с потолка, а как раз из Groovy ;)

Могу придумать и иные варианты, хоть бы и функции-итераторы с yield, но вот этот по крайней мере не из пальца высосанный, а дает реальное удобство при разработке =)
 
Хочу нормальные неймспейсы в PHP.
А еще лучше пакеты как в Java.
Но, судя по всему, в PHP 6 их еще не будет.

Меня бесят имена типа PHPUnit_Framework_TestCase
 
fisher Это - вызов анонимной (типо лямбда) функции. Из примера не следует, что родительская область видимости будет существовать до тех пор, пока существует анонимная функция, так как эта конкретная функция из примера, будет уничтожена при выходе из registerUser, потому что на нее больше никто не ссылается. Вот замыкание

PHP:
function one() {
     wait = 'request done';
     this.ajax.asyncRequest('param', function() {
          alert(wait);
     });
}

-~{}~ 18.03.10 19:13:

PS. суть-то замыкания в чем - вложенная области видимости замыкается на родительской, то есть ставит на ней замок, что не дает родителю освободиться.
 
Из примера это не следует только потому, что в этом примере таковой необходимости нет. :)

Мне написать пример с return function(), или не стоит? :)
 
fixxxer а такого примера нет для пыха. Время жизни области действия функции создавшей лябда-функцию и самой лямбда функции может различаться ТОЛЬКО если лямбда-функция передается в другой поток управления. Это-то надеюсь понятно? :) А пока их время жизни совпадает, наличие замыканий бессмыслено.

-~{}~ 18.03.10 19:26:

PS. Вы путаете анонимные функции и замыкания. Наличие анонимной функции не гарантирует возможность замыкания.
 
Сверху