2017-01-07 133 views
0

我在定義例如函數默認參數或在列表定義中使用頭尾時遇到Elixir中的奇怪行爲。酏劑中的奇怪行爲與空白字符

這不工作,導致一個錯誤unexpected token: " "

def a(b \\ "test") do 
    b 
end 

但是這一個作用:

def a(b \\"test") do 
    b 
end 

的區別是默認的字符串參數"test"

前的空白字符 " "

此外,這不起作用,並導致錯誤unexpected token: " "

[0 | [1,2,3,4,5]] 

但是這一次確實工作:

[0 |[1,2,3,4,5]] 

再次差別是在IEX尾列表定義[1,2,3,4,5]

問題的存在和編譯代碼前面的空格字符" "。我正在運行Elixir 1.4。我的系統是macOS Sierra,我使用iTerm作爲我的終端應用程序。

所以問題是:這是正確的行爲,還是在我的環境中出現了錯誤,例如在我的環境中,它可能是什麼?所有示例和指南都允許在這些位置留出空白,但出於某種原因,我的環境不允許。我能做些什麼嗎?

預先感謝您!

+0

如果你複製從這個問題'iex'粘貼代碼段?你仍然得到同樣的錯誤? (所有4個片段對我來說工作正常。) – Dogbert

+0

@Dogbert好吧,我會被詛咒的。事實上,當複製這些示例時,它似乎工作正常。同樣在tmux中,這些似乎在直接寫入iex時工作正常。但是,當我將這些文件寫入到沒有tmux的裸機終端時,我得到一個錯誤:「意外的令牌:」(第5列,代碼點U + 00A0)' 看起來沒有tmux的空白在某種程度上是無效的。 – veturi

+0

U + 00A0是一個非破壞性的空格字符:https://en.wikipedia.org/wiki/Non-breaking_space不知道爲什麼你在輸入空格時得到這個。 – Dogbert

回答

2

問題已得到解決,如評論中所述。

在macOS上alt+space提供非空白字符而不是普通空格。所描述的問題大多數情況下是在插入任何帶空白字符的字符後發生的,因爲我只是不夠快而不能釋放alt鍵,從而提供了錯誤的空白。

有關指令要求(如果要禁用替代空間的情況下),看看這個問題在MacOS解決此問題:https://superuser.com/questions/78245/how-to-disable-the-option-space-key-combination-for-non-breaking-spaces