【发布时间】:2012-05-24 22:42:13
【问题描述】:
我正在学习 Erlang,并试图弄清楚我可以并且应该如何在进程中保存状态。
例如,我正在尝试编写一个程序,它给出文件中的数字列表,告诉我该文件中是否出现数字。我的方法是使用两个进程
-
缓存,它将文件的内容读入一个集合,然后等待数字检查,然后回复它们是否出现在集合中。
is_member_loop(Data_file) -> Numbers = read_numbers(Data_file), receive {From, Number} -> From ! {self(), lists:member(Number, Numbers)}, is_member_loop(Data_file) end. -
客户端将数字发送到缓存并等待
true或false响应。check_number(Number) -> NumbersPid ! {self(), Number}, receive {NumbersPid, Is_member} -> Is_member end.
这种方法显然是幼稚的,因为每次请求都会读取文件。但是,我是 Erlang 的新手,我不清楚在不同请求之间保持状态的首选方式是什么。
我应该使用进程字典吗?对于这种进程状态,是否存在我不知道的不同机制?
更新
user601836 建议的最明显的解决方案是将一组数字作为参数传递给is_member_loop,而不是文件名。这似乎是 Erlang 中的一个常见习语,在奇妙的在线书籍Learn you some Erlang 中有一个很好的例子。
但我认为,对于我想在我的流程中保留的更复杂的状态,这个问题仍然存在。
【问题讨论】:
标签: erlang