5

在实施 NIF 时,Dialyzer 给了我

函数 crc16/1 没有本地返回

可能是因为我确实退出了 .erl 模块(就像官方文档推荐的那样):

-module(my_nifs).
-export([crc16/1]).

-on_load(init/0).

init() ->
    ok = erlang:load_nif("../nifs/my_nifs", 0).

-spec crc16(_Binary :: binary()) -> non_neg_integer().
crc16(_Binary) ->
    exit(nif_library_not_loaded).
...

通常,似乎使用exit/1总是使 Dialyzer 抱怨此消息(-spec .. -> no_return()无济于事)。

如何解决这个问题?

4

1 回答 1

10

你可以使用erlang:nif_error/1/2which where created 只是为了那个。

于 2014-10-28T15:50:21.033 回答