Что означает следующее утверждение из файла gproc_lib.erl? - PullRequest
1 голос
/ 23 февраля 2012

При чтении исходного кода github Project gproc "gproc_lib.erl" я столкнулся с некоторой проблемой.Где я могу найти справочную документацию по синтаксису этого оператора?

check_option_f(ets_options)    -> fun check_ets_option/1; **%<----**What's the meaning of this** statement**?
check_option_f(server_options) -> fun check_server_option/1.

check_ets_option({read_concurrency , B}) -> is_boolean(B);
check_ets_option({write_concurrency, B}) -> is_boolean(B);
check_ets_option(_) -> false.

check_server_option({priority, P}) ->
    %% Forbid setting priority to 'low' since that would
    %% surely cause problems. Unsure about 'max'...
    lists:member(P, [normal, high, max]);
check_server_option(_) ->
    %% assume it's a valid spawn option
    true.

1 Ответ

5 голосов
/ 23 февраля 2012

fun module:name/arity является значением функции, эквивалентным следующему:

fun(A1,A2,...,AN) -> module:name(A1,A2,...,AN) end

, где N - arity. Короче говоря, это полезный способ передать нормальные функции Эрланга в качестве аргументов другим функциям, которые ожидают функцию в качестве аргумента.

Пример:

Чтобы преобразовать список List в набор:

lists:foldl(fun sets:add_element/2, sets:new(), List).

Эквивалентно:

lists:foldl(fun (E, S) -> sets:add_element(E, S) end, sets:new(), L).

(Последнее - определение, используемое в модуле OTP set для функции from_list.)

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...