管道操作符|>
把前面表达式的结果传递给后面的表达式作为第一个参数。
编程可以变得很混乱,比如函数调用有多层嵌套以至于很难阅读:
foo(bar(baz(new_function(other_function()))))
这个例子中,我们把 other_function/0
的值传递给 new_function/1
,把 new_function/1
的值传递给 baz/1
,把 baz/1
的值传递给 bar/1
,最后把bar/1
的结果传递给foo/1
。Elixir 给我们提供了管道操作符来解决这个语法上的混乱。管道操作符|>
获取一个表达式的结果,并把它往后传递。 我们把上面的代码用管道重写看看:
other_function() |> new_function() |> baz() |> bar() |> foo()
管道获取左边的值,并把它传递给右边。
示例
字符分组
iex> "Elixir rocks" |> String.split()
["Elixir", "rocks"]
把所有分组大写
iex> "Elixir rocks" |> String.upcase() |> String.split()
["ELIXIR", "ROCKS"]
检查尾部字符串
iex> "elixir" |> String.ends_with?("ixir")
true
网友评论