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
Я бы добавил, что показывает, что код в вопросе расширяется. –
Выше изменение разм. Кода закончилось ошибкой .. helloworld.erl: 5: Предупреждение: этот раздел не может совпадать, поскольку предыдущее предложение в строке 5 всегда соответствует –
Это не ошибка, а предупреждение. Как я уже сказал, макрос создает замену строки, поэтому вы теперь компилируете код, в котором результат 'X == Y' всегда истинен, так как X и Y заменяются на« str ». Компилятор предупреждает вас, что второе предложение if никогда не будет выполнено. Если вы измените определение 'start() -> io: fwrite (" ~ w ", [? Macro1 (" str "," str ")]).' By 'start (X) -> io: fwrite (" ~ w ", [? macro1 (X," str ")]).', у вас не будет предупреждения, поскольку каждое условие может соответствовать в зависимости от значения X. – Pascal