String Erlang:干燥字符串+;二进制级联

String Erlang:干燥字符串+;二进制级联,string,erlang,String,Erlang,我目前正在使用字符串和二进制文件形成字符串,如下所示: X = string:join(io_lib:format("~s~s~s", ["something1", "something2",<<"something3">>]), "") %X is now something1something2something3 X=string:join(io_lib:format(“~s~s~s”、[“something1”、“something2”、]),”),)%X现在是

我目前正在使用字符串和二进制文件形成字符串,如下所示:

X = string:join(io_lib:format("~s~s~s", ["something1", "something2",<<"something3">>]), "") %X is now something1something2something3
X=string:join(io_lib:format(“~s~s~s”、[“something1”、“something2”、]),”),)%X现在是something1something2something3
这看起来既痛苦又混乱。因为为了用另一个不同数量的“~n”的字符串来干掉它:

Y=string:join(io_lib:format(“~s~s”,[“something1”,]),“”)
我必须编写一个计算参数列表大小的函数,形成
~n[多次]
,并将其插入其中

有没有更好的办法


Eshell V8.0.2(使用^G中止)
1> F=,
1> 字符串:join(io_lib:format(“~s~s~s”、[“something1”、“something2”、F]),“”)。
“某物1某物2 SDF”
2> 列表:展平([“something1”、“something2”、F])。
[115,111,109,101,116,104,105,110,103,49,115,111,109,101,116,
104,105,110,103,50,]
3>

我不明白为什么需要调用
io\u lib:format
。在这种情况下,它没有任何作用

string:join(["something1","something2","something3"], "").
会给你同样的结果。如果没有分隔符(并且利用了字符串在Erlang中只是列表的事实),则可以进一步简化:

更新

我现在看到您正在处理一个不同数据类型的列表。虽然单衬里看起来很漂亮,但你可以看到它们并不总是灵活的。在您的例子中,我将创建一些映射器函数来处理不同类型到字符串的映射。可能是这样的:

-module(string_utils).
-export([concat/1]).

to_string(Value) when is_binary(Value) -> binary_to_list(Value);
to_string(Value) -> Value.
concat(List) ->
  lists:flatten(lists:map(fun to_string/1, List)).
然后你的电话号码是:

string_utils:concat(["something1", "something2", <<"something3">>]).
string\u utils:concat([“something1”、“something2”,])。

我不明白为什么需要调用
io\u lib:format
。在这种情况下,它没有任何作用

string:join(["something1","something2","something3"], "").
会给你同样的结果。如果没有分隔符(并且利用了字符串在Erlang中只是列表的事实),则可以进一步简化:

更新

我现在看到您正在处理一个不同数据类型的列表。虽然单衬里看起来很漂亮,但你可以看到它们并不总是灵活的。在您的例子中,我将创建一些映射器函数来处理不同类型到字符串的映射。可能是这样的:

-module(string_utils).
-export([concat/1]).

to_string(Value) when is_binary(Value) -> binary_to_list(Value);
to_string(Value) -> Value.
concat(List) ->
  lists:flatten(lists:map(fun to_string/1, List)).
然后你的电话号码是:

string_utils:concat(["something1", "something2", <<"something3">>]).
string\u utils:concat([“something1”、“something2”,])。

为什么要格式化字符串,而不是将它们连接在一起?@JustinNiessner抱歉,我遗漏了一个重要的细节,我的错。这就是我尝试制作MWE得到的结果。我已经用另一种可能的解决方案更新了我的答案。你为什么要格式化字符串而不是仅仅将它们连接在一起?@JustinNiessner抱歉,我遗漏了一个重要的细节,我的错。这就是我尝试制作MWE得到的结果。我已经用另一种可能的解决方案更新了我的答案。对不起,我编辑了我的问题。我的一些列表元素是二进制文件。对不起,我编辑了我的问题。我的一些列表元素是二进制文件。