【问题标题】:How can I translate this piece of code from Erlang to Elixir?如何将这段代码从 Erlang 翻译成 Elixir?
【发布时间】:2017-12-02 02:35:25
【问题描述】:

如何将这段代码从 Erlang 翻译成 Elixir?

二郎:

xmpp:get_text(Packet#message.body)

灵药:

:xmpp.get_text(packet ... ?

【问题讨论】:

  • 每次你将一行代码从 Erlang 翻译成 Elixir 时,一个混沌特工都会残忍地谋杀一只小狗。请为小狗们。
  • 对此我很抱歉。但我认为导入 Elixir 库来做同样的工作是没有意义的。想法?

标签: erlang elixir ejabberd


【解决方案1】:

这是记录字段访问语法。该代码访问术语Packet 的字段body,假设Packet 是message 记录。 Elixir 提供了一个 Record 模块来处理这个问题。您需要首先使用Record.extract 导入记录的定义(更改.hrl 路径以指向包含记录定义的依赖项的hrl 文件;在您正在使用的库中搜索-record(message)和然后使用该定义。这是一个例子:

defmodule A do
  Record.defrecord :message, Record.extract(:message, from_lib: "path/to/file.hrl")
end

现在Packet#message.body 转换为A.message(packet, :body)。

【讨论】:

  • 谢谢@dogbert!以防万一,我正在使用这个库 [1],我认为该库已经这样做了。 1 - github.com/processone/xmpp
  • 库声明了记录,但您需要将其拉入 Elixir。该库不包含任何执行此操作的 Elixir 模块。我找到了在xmpp/include/xmpp_codec.hrl 中声明的message 记录,因此您可能希望通过from_lib: "deps/xmpp/include/xmpp_codec.hrl"。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多