Есть ли закрытие в c / c ++ / java / PHP? - PullRequest
0 голосов
/ 28 мая 2011

Пока что я вижу только закрытие в javascript:

var name=...;

$(..).onclick(function() {
     //here I can reference to name
});

Существует ли эта функция в c/c++/java/PHP?

Если существует, доступен ли один пример "Привет, мир"?

Ответы [ 7 ]

2 голосов
/ 28 мая 2011

Что касается PHP, вы можете разрешить доступ к определенной переменной внутри метода замыкания следующим образом:

$xVar = "var";

$closure = function() use ($xVar) {
    echo $xVar;
}

$closure();

И также возможно изменить эту переменную внутри замыкания:

$xVar = "var";

$closure = function($newVar) use (&$xVar) {
   $xVar = $newVar;
}

$closure("new var content");
1 голос
/ 28 мая 2011

В какой-то момент замыкания (Project Lambda) собирались стать частью Java 7, но в настоящее время они перечислены как «Отложено до Java 8 или более поздней версии» .

1 голос
/ 28 мая 2011

C ++ 11 имеет замыкания, как и PHP . Я не уверен насчет Java.

1 голос
/ 28 мая 2011

C нет, поскольку функции не являются объектами первого класса.
C ++ не пока , но это относится к будущему стандарту (обычно называемому C ++ 0x), с так называемымлямбда-выражения:

std::string name;
auto mylambda = [&](){ std::cout << name; };
//               ^ automatically reference all objects in the enclosing scope.
0 голосов
/ 28 мая 2011

Для C они доступны в виде нестандартного расширения, называемого blocks .

0 голосов
/ 28 мая 2011

PHP тоже есть, начиная с 5.3. Они не такие гибкие (в том смысле, что вы не можете использовать $this), но все же очень полезны.

Лисп и его диалекты также имеют замыкания.

0 голосов
/ 28 мая 2011

http://en.wikipedia.org/wiki/Closure_%28computer_science%29#PHP

Для PHP

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...