Elixir 区别于;fun1参数|>;fun2“;及;fun1(arg)|>;fun2“;长生不老药
我一直在试用Elixir中的一些简单键盘IO,主要是IO模块Elixir 区别于;fun1参数|>;fun2“;及;fun1(arg)|>;fun2“;长生不老药,elixir,Elixir,我一直在试用Elixir中的一些简单键盘IO,主要是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:po
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
?
的优先级高于Elixir解析器中的函数调用,因此:
IO.gets "Your name: " |> String.trim
与以下内容完全相同:
IO.gets("Your name: " |> String.trim)
IO.gets(String.trim("Your name: "))
这与:
IO.gets("Your name: " |> String.trim)
IO.gets(String.trim("Your name: "))
正如您已经了解到的,如果要修剪IO.gets
的结果,应该执行以下操作:
IO.gets("Your name: ") |> String.trim
|>
的优先级高于Elixir解析器中的函数调用,因此:
IO.gets "Your name: " |> String.trim
与以下内容完全相同:
IO.gets("Your name: " |> String.trim)
IO.gets(String.trim("Your name: "))
这与:
IO.gets("Your name: " |> String.trim)
IO.gets(String.trim("Your name: "))
正如您已经了解到的,如果要修剪IO.gets
的结果,应该执行以下操作:
IO.gets("Your name: ") |> String.trim
正如您所知,管道操作符在长生不老药中非常常见。 区别
IO.gets "Your name: " |> String.trim
及
这是至关重要的
在第一个示例中,您只将
“您的姓名:
”传递给String.trim,在第二个示例中,您将IO.get(“您的姓名:”)
的结果传递给String.trim。建议在处理管道操作符时使用括号。正如您所知,管道操作符在长生不老药中非常常见。
区别
IO.gets "Your name: " |> String.trim
及
这是至关重要的
在第一个示例中,您只将“您的姓名:
”传递给String.trim,在第二个示例中,您将IO.get(“您的姓名:”)
的结果传递给String.trim。建议在处理管道操作员时使用括号