首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"fun1 arg |> fun2“与"fun1(arg) |> fun2”在药物治疗中的区别

"fun1 arg |> fun2“与"fun1(arg) |> fun2”在药物治疗中的区别
EN

Stack Overflow用户
提问于 2016-08-16 17:33:45
回答 2查看 75关注 0票数 1

我已经尝试了一些简单的键盘IO在Elixir,主要是在IO模块。IO.puts非常方便,因为在其最基本的形式中,它会打印提示符并等待输入字符串。

我遇到了一些奇怪的行为,“奇怪”,因为我不知道到底发生了什么。下面是iex会话以及评论和问题:

代码语言:javascript
复制
iex(85)> IO.gets "Your name: "    
Your name: polo
"polo\n"

到目前一切尚好

代码语言:javascript
复制
iex(86)> IO.gets "Your name: " |> String.trim
Your name:polo
"polo\n"

首先要注意的是,像以前一样,polo不再由空格与提示符分隔。此外,trim函数不会应用,因为我在字符串末尾得到\n

现在,如果我输入:

代码语言:javascript
复制
iex(87)> String.trim(IO.gets "Your name: ")  
Your name: polo
"polo"

一切似乎都回到了正常的行为:提示符中的空格在这里,输入也按照预期进行了修剪。

最后,我想起了在一本书中读到的东西(或者是一个博客?)两种语法之间有一些细微的差别,所以我试了一下:

代码语言:javascript
复制
iex(88)> IO.gets("Your name: ") |> String.trim
Your name: polo
"polo"

还有宾果!

所以,基本上问题是,IO.gets "Your name: " |> String.trimIO.gets("Your name: ") |> String.trim有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-16 17:39:33

|>比Elixir解析器中的函数调用具有更高的优先级,因此如下所示:

代码语言:javascript
复制
IO.gets "Your name: " |> String.trim

与以下完全相同:

代码语言:javascript
复制
IO.gets("Your name: " |> String.trim)

这与以下相同:

代码语言:javascript
复制
IO.gets(String.trim("Your name: "))

正如您已经知道的,如果您想要修剪IO.gets的结果,您应该这样做:

代码语言:javascript
复制
IO.gets("Your name: ") |> String.trim
票数 9
EN

Stack Overflow用户

发布于 2016-08-16 17:41:21

管道操作符,如你所知,是简单的语法糖,在药剂非常常见。间差

代码语言:javascript
复制
IO.gets "Your name: " |> String.trim 

代码语言:javascript
复制
IO.gets("Your name: ") |> String.trim

是至关重要的。

在第一个例子中,只传递给String.trim "Your name: ",在第二个传递IO.gets("Your name: ")的结果。建议在处理管道操作员时使用括号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38981130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档