Для PHP 7 (может также применяться и к предыдущим версиям), но я должен был сделать это:
Добавьте это к нижней части /etc/apache2/apache2.conf
SetHandler application/x-httpd-php
Запустите это с терминала:
sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7
Затем не забудьте перезапустить Apache, чтобы он знал, что вы изменили материал:
sudo service apache2 restart
Это сводка из : https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/
В Erlang / OTP 17.0-rc1 вы можете использовать для этого именованную забаву:
1> Self = self(),
1> Fun = fun ThisFun() ->
Self ! wake_up,
receive after 1000 -> nil end,
ThisFun()
end.
#Fun<erl_eval.44.71889879>
2> spawn(Fun).
<0.35.0>
3> flush().
Shell got wake_up
Shell got wake_up
Shell got wake_up
ok
В более ранних версиях не было возможности сделать именно это. Вы можете передать саму функцию в качестве аргумента:
Self = self(),
Fun = fun(ThisFun) ->
Self ! wake_up,
receive after 1000 -> nil end,
ThisFun(ThisFun)
end
spawn(fun() -> Fun(Fun) end),
%% ...
Если вам хочется немного изменить ситуацию:
Y = fun(M,B) -> G = fun(F) -> M(fun() -> (F(F))() end, B) end, G(G) end.
spawn(Y(fun(F, ParentPid) -> fun() -> ParentPid ! wake_up, receive after 1000 -> ok end, F() end end, self())).
Сбросьте сообщения пару раз, чтобы увидеть результат:
flush().
Конечно, Y более полезно, если вы поместите его в какой-то вид библиотеки. Также вы можете найти этот пост на Y Combinators: http://bc.tech.coop/blog/070611.html довольно интересно
Язык Erlang не предоставляет возможности для анонимных функций ссылаться на них самих, но ходят слухи, что Core Erlang (промежуточное, но официальное представление на этапах компиляции) действительно имеет такой
Я не знаю, почему я пересылаю это, но вы знаете, что если вы генерируете Core Erlang в DSL или подобном, это то, что находится в пределах досягаемости.