2009-02-25 99 views
48

字符串我知道,二郎字符串應該不惜一切代價避免...轉換的整數二郎

,但如果我不這樣做,我怎麼產生「5」 5?

特別是,有沒有像io:format(「〜p」,[5])會返回一個格式化的字符串,而不是打印到流?

+1

不惜一切代價避免?你從哪裏得到這個想法?有一些性能問題和其他煩惱,但它們仍然是核心數據類型和字符串的默認選擇。 – cthulahoops 2009-02-26 00:48:18

+1

我用舌頭說話。如果我堅信你永遠不應該使用它們,我就不會問這個問題。另一方面,在我看來,將它們描述爲「核心數據類型」可能會把事情拉長一點。 – collapsinghrung 2009-02-26 03:28:16

+1

erlang中的字符串是一個列表。它是核心數據類型。與二元或原子相同。 – Worker 2012-12-18 16:16:55

回答

10

下可能不是最巧妙的方法,但它的工作原理:

1> lists:flatten(io_lib:format("~p", [35365])). 
"35365" 

編輯:我發現下面的功能顯得尤其有用:

%% string_format/2 
%% Like io:format except it returns the evaluated string rather than write 
%% it to standard output. 
%% Parameters: 
%% 1. format string similar to that used by io:format. 
%% 2. list of values to supply to format string. 
%% Returns: 
%% Formatted string. 
string_format(Pattern, Values) -> 
    lists:flatten(io_lib:format(Pattern, Values)). 

EDIT 2(在迴應評論時):上述功能來自於我編寫一段時間學習Erlang的小程序。我一直在尋找一個字符串格式化功能,發現io_lib:format/2行爲中erl反直覺的,例如:

1> io_lib:format("2 + 2 = ~p", [2+2]). 
[50,32,43,32,50,32,61,32,"4"] 

當時,我不知道所提到的「自動展平」輸出設備的行爲由@archaelus,所以斷定上述行爲不是我想要的。

今天晚上,我又回到了這個程序,並用io_lib:format替換了string_format函數的調用。這導致的唯一問題是少數EUnit測試失敗,因爲他們期望扁平化的字符串。這些很容易修復。

我同意@gleber和@womble使用這個函數將整數轉換爲字符串過大。如果這就是你所需要的,請使用integer_to_list/1。吻!

131

還有integer_to_list/1,這正是你想要的,沒有醜陋。

4

另外,如果您需要處理浮動的字符串表示形式,您應該查看Bob Ippolito在mochinum上完成的work

25

的字符串是一個列表:

9> integer_to_list(123). 
"123" 
2

列表:CONCAT([號碼])。也適用。