Как вы получаете сложную ссылку на функцию? - PullRequest
3 голосов
/ 07 апреля 2011

Как получить ссылку на функцию в модуле, если модуль динамически указан, и вы передадите его функции более высокого порядка?

Ex:

Mod = compare_funs,
lists:sort(fun Mod:compare/2, List).

Только это не скомпилируется. Одним из способов было бы обернуть вызов целевой функции в анонимную забаву, но мне было интересно, есть ли способ получить ссылку напрямую.

1 Ответ

3 голосов
/ 07 апреля 2011

Из документации по адресу:

http://www.erlang.org/doc/programming_examples/funs.html#id59209

Мы также можем обратиться к функции, определенной в другом модуле, со следующим синтаксисом:

F = {Module, FunctionName}

В этом случае функция должна быть экспортирована из рассматриваемого модуля.

Например, вы можете сделать:

-module(test).

-export([compare/2, test/2]).

compare(X, Y) when X > Y ->
    true;
compare(X, Y) ->
    false.

test(Mod, List) ->
    lists:sort({Mod, compare}, List).


1> test:test(test, [1,3,2]).
[3,2,1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...