2017-01-13 40 views
1

我是Elixir上的新手,我写了电报机器人。我使用这个项目作为模板:https://github.com/lubien/elixir-telegram-bot-boilerplateelixir上的电报bot

它工作正常,但我有几个问题。

  1. 如何分割“命令”如果它会太大?我有一个想法,创建一个新的模块NewCommands与use App.Commander,并将其添加到Matcher中的handle_cast。这是一个正确的方式吗?

  2. 为什么Matcher作为GenServer运行?我不认为它需要任何国家或水手。

回答

2
  1. 请阅读有关药剂use, import, and require之间的差异开始。

我们使用import每当我们要轻松访问功能或宏从其他模块,而不使用完全合格的名称。

因此不,use不应该在这里使用:import应该。其他方式是将命令定义为宏并将它们设为require,或者在__using__宏的NewCommands内写一个ad-hoc函数生成,然后只有use它。

  1. 我没有深入的代码,但我想你想Matcher自动respawned出了问题,它崩溃了,对吧? Erlang的哲学是“很快就会崩溃”,因此,我们只是让进程崩溃,而不是繁琐的错误处理。此后,如果您仍想匹配,应该重新生成,以便为更多请求提供服务。

此外,它在Commands之前用作调度程序。

+0

我知道关于导入/使用/需求,但我不知道如何在我的情况下使用它。有一个宏模块'Commander',它正在被'Commands'使用。我试图制作一个新的模块(使用Commander),并在那里写入命令,并在Commands中写入“import”,但它不起作用。 I – FancyDancy

+0

看看['Commander #__ using __/1'](https://github.com/lubien/elixir-telegram-bot-boilerplate/blob/master/lib/app/commander.ex#L6)是如何实现的,并且你的'NewCommands'也一样。 – mudasobwa