【问题标题】:error in program while comparing two string in macro in erlang在erlang中比较宏中的两个字符串时程序出错
【发布时间】:2017-06-01 01:57:51
【问题描述】:

我已经编写了宏来比较两个字符串,如下所示

-module(helloworld). 
-export([start/0]). 
-define(macro1(X,Y),{if X == Y -> "True"; true ->"False" end.}). 

start() ->
   io:fwrite("~w",[?macro1("str","str")]).

得到如下错误:

Compiling the source code....
$erlc helloworld.erl 2>&1
helloworld.erl:6: syntax error before: '.'
helloworld.erl:2: function start/0 undefined

【问题讨论】:

    标签: erlang erlang-shell


    【解决方案1】:

    宏不像函数定义。预处理器只是简单地进行字符串替换。所以在你的情况下,你必须删除大括号中的点:

    -define(macro1(X,Y),{if X == Y -> "True"; true ->"False" end}). 
    

    【讨论】:

    • 我会添加显示问题中的代码扩展为什么。
    • 以上代码更改以错误结束。helloworld.erl:5: 警告:此子句无法匹配,因为第 5 行的前一个子句始终匹配
    • 这不是错误而是警告。正如我所说,宏进行字符串替换,因此您现在正在编译代码,其中X==Y 的结果始终为真,因为 X 和 Y 都被替换为“str”。编译器警告您 if 的第二个子句永远不会被执行。如果您将定义 start() -> io:fwrite("~w",[?macro1("str","str")]). 更改为 start(X) -> io:fwrite("~w",[?macro1(X,"str")]).,您将不会收到任何警告,因为每个条件都可以根据 X 值匹配。
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2018-03-01
    相关资源
    最近更新 更多