我已经尝试了一些简单的键盘IO在Elixir,主要是在IO模块。IO.puts非常方便,因为在其最基本的形式中,它会打印提示符并等待输入字符串。
我遇到了一些奇怪的行为,“奇怪”,因为我不知道到底发生了什么。下面是iex会话以及评论和问题:
iex(85)> IO.gets "Your name: "
Your name: polo
"polo\n"到目前一切尚好
iex(86)> IO.gets "Your name: " |> String.trim
Your name:polo
"polo\n"首先要注意的是,像以前一样,polo不再由空格与提示符分隔。此外,trim函数不会应用,因为我在字符串末尾得到\n。
现在,如果我输入:
iex(87)> String.trim(IO.gets "Your name: ")
Your name: polo
"polo"一切似乎都回到了正常的行为:提示符中的空格在这里,输入也按照预期进行了修剪。
最后,我想起了在一本书中读到的东西(或者是一个博客?)两种语法之间有一些细微的差别,所以我试了一下:
iex(88)> IO.gets("Your name: ") |> String.trim
Your name: polo
"polo"还有宾果!
所以,基本上问题是,IO.gets "Your name: " |> String.trim和IO.gets("Your name: ") |> String.trim有什么区别?
发布于 2016-08-16 17:39:33
|>比Elixir解析器中的函数调用具有更高的优先级,因此如下所示:
IO.gets "Your name: " |> String.trim与以下完全相同:
IO.gets("Your name: " |> String.trim)这与以下相同:
IO.gets(String.trim("Your name: "))正如您已经知道的,如果您想要修剪IO.gets的结果,您应该这样做:
IO.gets("Your name: ") |> String.trim发布于 2016-08-16 17:41:21
管道操作符,如你所知,是简单的语法糖,在药剂非常常见。间差
IO.gets "Your name: " |> String.trim 和
IO.gets("Your name: ") |> String.trim是至关重要的。
在第一个例子中,只传递给String.trim "Your name: ",在第二个传递IO.gets("Your name: ")的结果。建议在处理管道操作员时使用括号。
https://stackoverflow.com/questions/38981130
复制相似问题