2017-01-17 55 views
1

宏觀比較兩個字符串我寫的宏來比較兩個字符串作爲跟隨錯誤程序,而在二郎

-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 

回答

4

宏是不喜歡的功能定義。預處理器只需更換字符串。所以在你的情況下,你必須刪除在大括號中的圓點:

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

我會添加顯示問題中的代碼擴展到。 –

+0

代碼上面的更改以錯誤結束.. helloworld.erl:5:警告:此子句不能匹配,因爲第5行的前一個子句總是匹配 –

+1

這不是錯誤,而是警告。正如我所說的,宏使字符串替換,所以你現在正在編譯一個代碼,其中'X == Y'的結果總是爲真,因爲X和Y都被替換爲「str」。編譯器警告你,if的第二個子句永遠不會被執行。如果通過'start(X) - > io:fwrite(「)來定義'start() - > io:fwrite(」〜w「,[?macro1(」str「,」str「)] 〜w「,[?macro1(X,」str「)])。',你將不會有任何警告,因爲每個條件都可以匹配,這取決於X值。 – Pascal