Syntax 带空格字符的长生不老药中的怪异行为

Syntax 带空格字符的长生不老药中的怪异行为,syntax,elixir,Syntax,Elixir,例如,在定义函数默认参数或在列表定义中使用head | tail时,我在Elixir中遇到了一种奇怪的行为 这不起作用,并导致错误意外标记:“”: 但这一个是: def a(b \\"test") do b end 区别在于默认字符串参数“test” 此外,这也不起作用,并导致错误意外标记:“”: 但这一条确实有效: [0 |[1,2,3,4,5]] 同样,区别在于尾部列表定义前面的空白字符“”[1,2,3,4,5] 这个问题存在于IEX和编译代码中。我在运行长生不老药1.4。我的系

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

这不起作用,并导致错误
意外标记:“”

但这一个是:

def a(b \\"test") do
    b
end
区别在于默认字符串参数“test”

此外,这也不起作用,并导致错误
意外标记:“”

但这一条确实有效:

[0 |[1,2,3,4,5]]
同样,区别在于尾部列表定义前面的空白字符
”[1,2,3,4,5]

这个问题存在于IEX和编译代码中。我在运行长生不老药1.4。我的系统是macOS Sierra,我使用iTerm作为终端应用程序

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


提前谢谢你

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

在macOS上,
alt+space
提供不间断空格字符,而不是普通空格。大多数情况下,在插入空格后带有alt组合的字符后,都会出现上述问题,因为我的速度不够快,无法释放alt键,因此提供了错误的空格


有关在macOS上解决此问题的说明(如果要禁用备用空间),请查看此问题:

如果将此问题中的代码片段复制粘贴到
iex
,会怎么样?你还会犯同样的错误吗?(所有4段代码对我来说都很好。)@Dogbert好吧,我会被诅咒的。事实上,当复制粘贴这些示例时,似乎效果不错。此外,在tmux中,当直接向iex写入时,这些功能似乎工作得很好。但是,当我在没有tmux的裸终端中将这些内容写入iex时,我得到了一个错误
意外标记:“”(第5列,代码点U+00A0)
似乎没有tmux的空白在某种程度上是无效的。U+00A0是一个不间断的空格字符:不确定键入空格时为什么会出现这种情况。@Dogbert我发现了问题。按下alt+space时,macOS会生成非中断空格而不是正常空格。当我在
|
字符后编写代码时,有时会出现这种情况,因为这需要按下alt键,而我只是没有足够快地释放alt键。对于macOS,它产生00A0而不是普通的空格字符。
[0 | [1,2,3,4,5]]
[0 |[1,2,3,4,5]]