我一直在Elixir中尝试一些简单的键盘IO,主要是在IO模块中.IO.puts
在最基本的形式中它非常方便,它会打印一个提示并等待输入字符串.
我遇到了一些奇怪的行为; "奇怪",因为我无法弄清楚究竟发生了什么.以下是iex
会议以及评论和问题:
iex(85)> IO.gets "Your name: "
Your name: polo
"polo\n"
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好
iex(86)> IO.gets "Your name: " |> String.trim
Your name:polo
"polo\n"
Run Code Online (Sandbox Code Playgroud)
第一个通知,polo
不再像以前那样用提示中的空格分隔.此外,该trim
函数不适用,因为我得到\n
字符串的末尾.
现在,如果我输入:
iex(87)> String.trim(IO.gets "Your name: ")
Your name: polo
"polo"
Run Code Online (Sandbox Code Playgroud)
一切似乎都回到正常行为:提示中的空间在这里,输入按预期修剪.
最后我还记得读一本书(或者是博客?)两种语法之间有一些细微的差别,所以我试过:
iex(88)> IO.gets("Your name: ") |> String.trim
Your name: polo
"polo"
Run Code Online (Sandbox Code Playgroud)
和宾果游戏!
所以,基本上问题是,和之间有什么区别IO.gets "Your name: " |> String.trim
IO.gets("Your name: ") |> String.trim
?
|>
具有比Elixir解析器中的函数调用更高的优先级,因此:
IO.gets "Your name: " |> String.trim
Run Code Online (Sandbox Code Playgroud)
与以下内容完全相同:
IO.gets("Your name: " |> String.trim)
Run Code Online (Sandbox Code Playgroud)
这与:
IO.gets(String.trim("Your name: "))
Run Code Online (Sandbox Code Playgroud)
正如你已经想到的那样,如果你想修剪结果IO.gets
,你应该这样做:
IO.gets("Your name: ") |> String.trim
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
68 次 |
最近记录: |