Elixir 返回值

Eya*_*der 3 elixir

我尝试使用管道运算符 (|>) 将值从一个函数传递到另一个函数,但第一个函数的结果返回我的输出和“:ok”,然后影响后续 |> 输入的输入。

例子:

defmodule TestPipe do 
def parse(msg), do: IO.puts "Parsed: #{msg}"
end 


iex> "this is my message" |> Test.parse |> Test.parse
iex> Parsed: this is my message
iex> Parsed: ok
iex> :ok
Run Code Online (Sandbox Code Playgroud)

Eve*_*ett 5

不幸的是,IO.puts/2这有点令人困惑:虽然它确实打印了您发送的变量,但它实际上返回了一个:ok. 这意味着查看它的输出会很奇怪。

IO.inspect/2可能更符合您的需求,因为它不仅打印输出,而且返回不变的输入,这使得检查管道变得很方便。

将其与您的示例进行比较:

defmodule TestPipe do
  def parse(msg), do: IO.inspect(msg, label: "Parsed")
end


iex> "this is my message" |> TestPipe.parse() |> TestPipe.parse()
Parsed: "this is my message"
Parsed: "this is my message"
"this is my message"
Run Code Online (Sandbox Code Playgroud)

正如罗杰在另一个答案中提到的,要点是,每当您处理管道时,您都必须额外注意返回值 - 特别是当函数返回包装在元组中的值时,因为它可能不会是下一个函数所期望的。