您好我有一个示例erlang代码,
%%file_comment
-module(helloworld).
%% ====================================================================
%% API functions
%% ====================================================================
-export([add/2,subtract/2,hello/0,greet_and_math/1]).
%% ====================================================================
%% Internal functions
%% ====================================================================
add(A,B)->
A+B.
subtract(A,B)->
io:format("SUBTRACT!~n"),
A-B.
hello()->
io:format("Hello, world!~n").
greet_and_math(X) ->
hello(),
subtract(X,3),
add(X,2).
当我跑步时
helloworld:greet_and_math(15).
输出是:
你好,世界!
SUBTRACT!
17
我怀疑为什么15-2 = 13的A-B没有打印在控制台上?
答案 0 :(得分:2)
那是因为你从未打印 15-2。您需要的代码如下所示:
%%file_comment
-module(helloworld).
%% ====================================================================
%% API functions
%% ====================================================================
-export([add/2,subtract/2,hello/0,greet_and_math/1]).
%% ====================================================================
%% Internal functions
%% ====================================================================
add(A,B)->
A+B.
subtract(A,B)->
io:format("SUBTRACT!~n"),
io:format("~p~n", [A-B]). % this will make sure A-B is printed to console
hello()->
io:format("Hello, world!~n").
greet_and_math(X) ->
hello(),
subtract(X,3),
add(X,2).
那会给你:
Hello, world!
SUBTRACT!
12
17
如果您想知道为什么要打印17
,那是因为它是最后一个表达式。这个在执行代码后总是打印到控制台,因为它实际上是代码返回的内容。只需在控制台上执行io:format("hello~n").
,您就会看到:
hello
ok
在这种情况下,ok
由io:format
返回,因为它是最后一个表达式,所以它将被打印出来。
io:format("hello~n"),
io:format("world~n").
将导致:
hello
world
ok
在控制台上只能看到第二个ok
返回的最后一个io:format
我希望你能了解这是如何运作的。
所以在你的情况下输入:
4> A = helloworld:greet_and_math(15).
Hello, world!
SUBTRACT!
17
5> A.
17
6>
您看到17
返回的值greet_and_math(15)
是多少,因为它是最后一个表达式?因此可以将其分配给变量。
答案 1 :(得分:1)
@ A.W。并不是最后一个值是自动打印的,它是 shell打印你所做的调用的值。因此,当您致电greet_and_math(15)
时,该功能将会:
hello()
。从ok
的调用中返回io:format
的返回值将被忽略。subtract(X, 3)
。它的返回值12
将被忽略。add(X, 2)
。它的返回值17
则成为整个函数的返回值。 shell 打印出来的是17
的返回值。所以: