【发布时间】:2016-08-09 12:59:35
【问题描述】:
我试图简单地让这个 Erlang 程序定期打印出一个值,我正在使用这个模块来这样做:
-module(hot).
-export([start/0,handle_info/2, add/1]).
start() ->
Num = 0,
timer:send_interval(1000, interval),
{ok, Num}.
handle_info(interval, Num) ->
erlang:display(0),
{noreply, Num}.
add(X) ->
X+2.
我引用了this post 的答案之一
我还尝试使用来自最佳答案的修改,如下所示:
init([]) ->
Timer = erlang:send_after(1, self(), check),
{ok, Timer}.
handle_info(check, OldTimer) ->
erlang:cancel_timer(OldTimer),
erlang:display(0),
Timer = erlang:send_after(1000, self(), check),
{noreply, Timer}.
在这两种情况下都不会打印任何内容。它只是告诉我类似 {ok,} 的信息。似乎根本没有调用handle_info。
【问题讨论】:
-
当然。如果你写下你正在做什么(调用哪些函数)以及你希望在显示器上看到什么会更好。
-
erlang:display(0)。只显示0。此时它是什么并不重要,它只是一个实验。我只是调用 init() 或 start()。
-
你误会了,我想知道你想得到什么结果。 handle_info - 用于处理 gen_server OTP 中的自发消息。您必须处理从计时器收到的消息。
-
我是 Erlang 的新手,我一定不明白这里发生了什么。最终,我想要的只是每秒将一个值打印到屏幕上。也许这是完全错误的方法?消息本身并不是我真正关心的东西,它始终是相同的消息——在屏幕上显示一个值。
-
我只是英语不好,所以我想确保在回答之前正确理解问题。