尝试在不创建新变量的情况下返回结果

Kot*_*taa 0 elixir

有没有办法简化这段代码:

def test do
    var1 = func1()
    |> func2()
    |> func3()

    var2 = if var1 == nil do
      var1
    else
      func4(var1)
    end

    func5(var2)
end
Run Code Online (Sandbox Code Playgroud)

我想避免创建var2并返回结果.

Ale*_*kin 5

虽然Dogbert的答案是绝对正确的,但我想展示一些可能用于完全消除中间局部变量的技巧.

模式匹配而不是 if

def test do
    func1()
    |> func2()
    |> func3()
    |> fn
      nil -> nil
      var -> func4(var)
    end.() # ? call the anonymous function inplace
    |> func5()
end
Run Code Online (Sandbox Code Playgroud)

链接 if

这种方法在这种情况下不起作用,因为func4需要将链式变量作为​​参数传入,但通常情况下if也可以链接:

def test do
    func1()
    |> func2()
    |> func3()
    |> if(do: nil, else: func4())
    |> func5()
end
Run Code Online (Sandbox Code Playgroud)

上面有副作用,并不是100%相同== nil,因为false也是falsey,但这个例子的优雅使我觉得值得一提.