Erlang字符串:连接vs io_库:格式

Erlang字符串:连接vs io_库:格式,erlang,Erlang,我有一段代码,其中取4个值,并用管道(“|”)连接它们。目前,其实施方式如下: lists:flatten(io_lib:format("~s~s~s~s~s",[Id, Delim, Date, Delim, Signature])). 列表:展平(io_lib:format(“~s~s~s~s~s”,[Id,Delim,Date,Delim,Signature])。 但是,我想知道改用string:join(除了看起来更干净之外)是否有什么好处?它会稍微快一点,但更重要的是更容易阅读,正如我

我有一段代码,其中取4个值,并用管道(“|”)连接它们。目前,其实施方式如下:

lists:flatten(io_lib:format("~s~s~s~s~s",[Id, Delim, Date, Delim, Signature])). 列表:展平(io_lib:format(“~s~s~s~s~s”,[Id,Delim,Date,Delim,Signature])。
但是,我想知道改用string:join(除了看起来更干净之外)是否有什么好处?

它会稍微快一点,但更重要的是更容易阅读,正如我一直宣称的“清晰为王”。

尽管
string:join([Id,Date,Signature],“|”)和
列表:flatten(io_lib:format(~s~s~s~s),[Id,Delim,Date,Delim,Signature])。
如果给出相同的结果,则首选
string:join
,因为它具有更好的可读性:

  • 函数的名称描述了实际意图
  • 它很简洁,所以读者不会因为冗长而分心
可读性是最重要的,因为在一个项目中,代码经常被多次读取,而仅仅是使用

 [Id, $|, Delim,
      $|, Date,
      $|, Delim,
      $|, Signature]
可能是有效的,因为它已经是一个
iolist()
。因此您不必通过任何方式发送它。数据已经是您所寻找的连接。为了这样做而操纵数据并将其展平通常是一个错误,最多只会浪费时钟周期并使用更多内存资源