在定义例如函数默认参数或在列表定义中使用 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 作为我的终端应用程序。
所以问题是:这是正确的行为还是例如在我的环境中存在问题以及它可能是什么?所有示例和指南都允许在这些位置使用空格,但出于某种原因,我的环境不允许。我能做些什么吗?
先感谢您!
如评论中所述,问题已得到解决。
在 macOS 上alt+space提供不间断空格字符而不是普通空格。所描述的问题大多发生在在空格后插入任何带有 alt 组合的字符之后,因为我的速度不够快,无法释放 alt 键,因此提供了错误的空格。
有关在 macOS 上解决此问题的说明(如果您想禁用备用空间),请查看此问题:https : //superuser.com/questions/78245/how-to-disable-the-option-space-key-不间断空格组合