2017-01-07 94 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