具有空白字符的长生不老药中的奇怪行为

vet*_*uri 3 syntax elixir

在定义例如函数默认参数或在列表定义中使用 head|tail 时,我在 Elixir 中遇到了一个奇怪的行为。

这不起作用并导致错误unexpected token: " "

def a(b \\ "test") do
  b
end
Run Code Online (Sandbox Code Playgroud)

但这个确实:

def a(b \\"test") do
    b
end
Run Code Online (Sandbox Code Playgroud)

不同之处" "在于默认字符串参数前面的空白字符"test"

这也不起作用并导致错误unexpected token: " "

[0 | [1,2,3,4,5]]
Run Code Online (Sandbox Code Playgroud)

但这个确实有效:

[0 |[1,2,3,4,5]]
Run Code Online (Sandbox Code Playgroud)

再次区别" "在于尾部列表定义之前的空白字符[1,2,3,4,5]

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

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

先感谢您!

vet*_*uri 7

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

在 macOS 上alt+space提供不间断空格字符而不是普通空格。所描述的问题大多发生在在空格后插入任何带有 alt 组合的字符之后,因为我的速度不够快,无法释放 alt 键,因此提供了错误的空格。

有关在 macOS 上解决此问题的说明(如果您想禁用备用空间),请查看此问题:https : //superuser.com/questions/78245/how-to-disable-the-option-space-key-不间断空格组合