Elixir中具有空白字符的奇怪行为

时间:2017-01-07 09:24:48

标签: syntax elixir

在定义示例函数默认参数或在列表定义中使用head | tail时,我在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]]

差异是尾部列表定义" "之前的空格字符[1,2,3,4,5]

IEX和编译代码中存在问题。我正在运行Elixir 1.4。我的系统是macOS Sierra,我使用iTerm作为我的终端应用程序。

所以问题是:这是正确的行为还是在我的环境中出现了什么问题?它可能是什么?所有示例和指南都允许在这些位置使用空格,但出于某种原因,我的环境却没有。我能做点什么吗?

提前谢谢!

1 个答案:

答案 0 :(得分:3)

问题得到解决,如评论中所述。

在macOS上alt+space提供非空格字符而不是普通空格。在空格后插入任何带有alt-combination的字符后,大多数情况下都会出现所描述的问题,因为我的速度不足以释放alt-key,因此提供了错误的空格。

有关在macOS上解决此问题的说明(如果您要禁用备用空间,请查看此问题):https://superuser.com/questions/78245/how-to-disable-the-option-space-key-combination-for-non-breaking-spaces