Эрланг: как я могу ссылаться на анонимную функцию внутри тела?

Для 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/

13
задан Peter Mortensen 8 October 2009 в 11:46
поделиться

3 ответа

В 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),
%% ...
28
ответ дан 1 December 2019 в 19:08
поделиться

Если вам хочется немного изменить ситуацию:

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 довольно интересно

7
ответ дан 1 December 2019 в 19:08
поделиться

Язык Erlang не предоставляет возможности для анонимных функций ссылаться на них самих, но ходят слухи, что Core Erlang (промежуточное, но официальное представление на этапах компиляции) действительно имеет такой

Я не знаю, почему я пересылаю это, но вы знаете, что если вы генерируете Core Erlang в DSL или подобном, это то, что находится в пределах досягаемости.

3
ответ дан 1 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: