我在定义例如函数默认参数或在列表定义中使用头尾时遇到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作为我的终端应用程序。
所以问题是:这是正确的行为,还是在我的环境中出现了错误,例如在我的环境中,它可能是什么?所有示例和指南都允许在这些位置留出空白,但出于某种原因,我的环境不允许。我能做些什么吗?
预先感谢您!
如果你复制从这个问题'iex'粘贴代码段?你仍然得到同样的错误? (所有4个片段对我来说工作正常。) – Dogbert
@Dogbert好吧,我会被诅咒的。事实上,当复制这些示例时,它似乎工作正常。同样在tmux中,这些似乎在直接写入iex时工作正常。但是,当我将这些文件写入到没有tmux的裸机终端时,我得到一个错误:“意外的令牌:”(第5列,代码点U + 00A0)' 看起来没有tmux的空白在某种程度上是无效的。 – veturi
U + 00A0是一个非破坏性的空格字符:https://en.wikipedia.org/wiki/Non-breaking_space不知道为什么你在输入空格时得到这个。 – Dogbert