Erlang中的模式匹配会抛出一个未使用变量的警告

时间:2017-03-09 18:20:55

标签: erlang pattern-matching erlang-shell

我在Erlang中编写了一个名为is_zero的简单函数,它检查函数的参数是否为零。代码如下。

-module(match).

-export([is_zero/1]).

% defining a function named is_zero

% this is a function with two clauses

% these clauses are matched sequentially

is_zero(0) ->
    true;
is_zero(X) ->
    false.

当我尝试使用c(match).编译代码时(该文件也被命名为match.erl),它会返回一条警告variable "X" is unused

如果我尽管发出警告仍然运行is_zero(0).,那么shell会抛出异常错误,说undefined shell command is_zero/1

我做错了什么?

我想不出任何纠正,我也找不到任何有用的建议。

1 个答案:

答案 0 :(得分:3)

Erlang中的函数在modules中定义。要区分不同模块的功能,需要将模块名称添加到功能中。在这种情况下,您需要运行match:is_zero(0).而不仅仅是is_zero(0).

要避免出现variable "X" is unused的警告,请使用下划线变量:

is_zero(_) ->
    false.

请注意,即使未使用变量名称也很有用,以提高可读性。如果要为变量命名并仍然避免编译器警告,请在下面添加下划线名称:

is_zero(_Num) ->
    false.