2012-10-29 34 views
1

在二郎\之間的區別’,\"是一個轉義字符,這意味着雙引號。是什麼「和‘二郎

我的問題是,是什麼"\"test\""""test""區別?我想問的原因是因爲,我想處理list_to_atom錯誤:

> list_to_atom("\"test\""). 
'"test"' 
> list_to_atom(""test""). 
* 1: syntax error before: test 

回答

5

""是長度的字符串/列表0

\"只是一個轉義雙 - 在字符串的上下文中使用時。如果你想有一個包含只是一個雙引號(即\")的字符串,那麼你可以做:"\""

""test""是語法錯誤,與"" test ""沒有什麼區別,它在語法上是<list><atom><list>。你想達到什麼目的?

+0

我要編寫一個從鍵盤讀取的函數,直到輸入一個原子爲止。我必須用get_line和list_to_atom來做到這一點。 – otisonoza

2

它不建議動態生成原子作爲他們從來沒有垃圾回收。

讀取用戶輸入時,您最好使用list_to_existing_atom/1。否則,可能會導致內存不足(在系統運行時間足夠長的情況下;但是,嘿,這就是Erlang所用的系統,不是嗎?)並導致整個虛擬機崩潰。

list_to_existing_atom/1將拋出的情況下,原子不存在,如果存在返回的原子錯誤。像catch list_to_existing_atom(some_atom)的構建體可能證明有用加上case .. oftry ... catch塊。在殼中嘗試一下,看看你最喜歡什麼。

如果這個答案似乎風馬牛不相及的問題,那麼請注意,我不能還沒有發表評論,所以這個答案中挑起大梁的回答的意見,即:

I have to write a function that reads from keyboard until an atom is typed. I have to do this with get_line and list_to_atom. – otisonoza