2016-09-28 68 views
1

我目前形成的字符串和二進制字符串是這樣的:二郎:乾涸字符串+二進制串聯

X = string:join(io_lib:format("~s~s~s", ["something1", "something2",<<"something3">>]), "") %X is now something1something2something3 

這似乎是痛苦和混亂。因爲爲了幹這個了另一個這樣的字符串以不同數量的「〜N」:

Y = string:join(io_lib:format("~s~s", ["something1", <<"something2">>]), "") 

我基本上都寫計數參數列表的大小,並形成~n[that many times]並將它插入功能進入這個。

有沒有更好的方法來做到這一點?

Eshell V8.0.2 (abort with ^G) 1> F = <<"asdf">>, 1> string:join(io_lib:format("~s~s~s", ["something1", "something2", F]),""). "something1something2asdf" 2> lists:flatten(["something1", "something2", F]). [115,111,109,101,116,104,105,110,103,49,115,111,109,101,116, 104,105,110,103,50,<<"asdf">>] 3>

+3

你爲什麼要格式化字符串的所有,而不是僅僅將它們連接在一起? –

+0

@JustinNiessner對不起,我遺漏了一個關鍵的細節,我的壞。這就是我試圖製作MWE所得到的結果。 – Tommy

+0

我已經用您的問題的另一個可能的解決方案更新了我的答案。 –

回答

5

我很困惑,爲什麼你需要調用io_lib:format可言。這種情況沒有做任何工作。

string:join(["something1","something2","something3"], ""). 

會給你同樣的結果。你甚至可以進一步簡化,如果真的沒有分隔符(和採取的事實,即串只是在Erlang中列出):

lists:flatten(["something1", "something2", "something3"]). 

更新

我,現在你正在使用的看不同數據類型的列表。雖然單線可能看起來很漂亮,但您可以看到它們並不總是靈活的。在你的情況下,我會創建一些映射函數來處理將不同類型映射到字符串。也許是這樣的:

-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">>]). 
+0

對不起,我編輯了我的問題。我的一些列表元素是二進制文件。 – Tommy