【问题标题】:How to get Erlang modules to talk to each other?如何让 Erlang 模块相互通信?
【发布时间】:2013-05-03 12:01:15
【问题描述】:

我正在用 Erlang 构建一个简单的控制台游戏。在过去的两天里,我一直在编写一些 Erlang 模块和测试,并且一切正常(在各个模块中)。我对如何运行游戏并让模块协同工作感到困惑。

我一直在阅读“Greater Good”一书,并且阅读了很多关于 OTP 的内容,但感觉难以承受。有没有我可以在某处学习的简单教程?书中的 OPT 示例对我正在尝试做的事情是否过分夸大?

更新:感谢您的反馈。这是一个更具体的问题。

我有两个模块.....

Console_IO 模块

-module(console_io).
-export([display/1, display_welcome_message/0, gets/1]).

display(Message) ->
  io:format(Message).

gets(Message) ->
  {ok, [X]} = io:fread(Message, "~s").
  io:format("You entered '~s'.", [X]);

display_welcome_message() ->
  display("Welcome to the game!").

密码模块

-module(secret_code).
-export([generate/0, symbols/0]).

generate() ->
  random:seed(now()),
  [lists:nth(random:uniform(6), symbols()) || _ <- lists:seq(1, 4)].

symbols() ->
  ["b","g","p","r","y","o"].

这两个模块位于不同的文件中。我希望这些模块能够相互交谈,以便用户可以输入猜测,尝试猜测密码并且游戏返回“是”或“否”。

我想在我的“gets”语句中添加两行来生成密码并将其与猜测进行比较:

-module(console_io).
-export([display/1, display_welcome_message/0, gets/1]).

display(Message) ->
  io:format(Message).

gets(Message) ->
  {ok, [X]} = io:fread(Message, "~s"),
  Code = secret_code:generate,
  Code -- [X].

display_welcome_message() ->
  display("Welcome to the game!").

我知道我没有走在正确的轨道上。有没有简单的方法来做到这一点?

【问题讨论】:

  • 您应该添加一些更具体的示例和代码,否则您的问题不适合该网站。请阅读FAQ

标签: erlang erlang-otp


【解决方案1】:

您已经在 console_io 模块中调用:
format 模块的 io 函数 io:format(Message)
secret_code 模块 random:seed(now())random 模块的种子 函数。
与调用 generate 函数的方式相同secret_code 模块,如下所示:secret_code:generate()

您可以在线阅读 LearnYouSomeEralng 教程,这是 Erlang/OTP 的最佳教程之一,并且在各个方面都完整。罢工>

【讨论】:

    【解决方案2】:

    Code = secret_code:generate, 应该作为函数调用Code = secret_code:generate(), 调用。可以使用模式匹配进行比较。代码如下

    -module(console_io).
    -export([display/1, display_welcome_message/0, gets/1]).
    
    display(Message) ->
      io:format(Message).
    
    gets(Message) ->
      {ok, [X]} = io:fread(Message, "~s"),
      Code = secret_code:generate(),
      check_code(X, Code).
    
    check_code(Code, Code) ->
        yes;
    check_code(_, _) ->
        no.
    
    display_welcome_message() ->
      display("Welcome to the game!").
    

    注意 secret_code 中的区别,以字符串形式获取它而不是返回字符串列表

    -module(secret_code).
    -export([generate/0, symbols/0]).
    
    generate() ->
      random:seed(now()),
      [lists:nth(random:uniform(6), symbols()) || _ <- lists:seq(1, 4)].
    
    symbols() ->
      "bgpryo".
    

    示例运行:

    1> console_io:gets(">").
    >bgryo
    yes
    2> console_io:gets(">").
    >bgryj
    no
    3>
    

    【讨论】:

    • 哇,谢谢!!!这对我帮助很大!以及 10000 积分用于向我展示如何比较两个答案。 :)
    猜你喜欢
    • 2010-11-07
    • 2011-10-12
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2012-12-05
    • 1970-01-01
    相关资源
    最近更新 更多