0

我正在尝试为一个 erlang 应用程序 (rabbitmq) 编写一个配置文件,其 conf si 写为一个 erlang term 1

我的属性是一个 ruby​​ 哈希,你知道我如何将这个哈希转换为一个漂亮的印刷 erlang 术语吗?

4

1 回答 1

1

如果我必须自己做这件事,也许是这样的:

def to_erl(o)
  case o
  when Hash
    '[' +
       o.map {|(k,v)|
        "{#{k}, #{to_erl v}}"
       }.join(",\n") +
     ']'
  when Array
    '[' + o.map{|v| to_erl(v)}.join(",")  +']'
  when TrueClass then "true"
  when FalseClass then "false"
  when Integer then o.to_s
  when String then o
  when Symbol then o.to_s
  # ... and whatever else you can think of
  else
    raise "Don't know how to erlify #{o}"
  end
end

...但是我敢打赌,您可以从一些必须在 ruby​​ 和 erlang 之间序列化的开源项目中窃取一些不错的代码。

对于序列化erlang,BERT 是事实上的(二进制 Erlang 术语)。似乎有很多从 Ruby 哈希到 BERT 的库。还没有看到一个给你简单的文本 erlang 术语的。

因为这是一个厨师食谱,所以在收敛时不要弄乱太多的 ruby​​ 依赖项是个好主意。您将调用#to_hash 您的厨师属性,并且您将得到的内容将非常简单(没有对象,我猜只有数字/布尔值/字符串/数组和哈希)来管理一些自制代码。

于 2013-01-25T10:33:24.660 回答