有没有办法简化这段代码:
keyup
我想避免创建var2并返回结果。
答案 0 :(得分:5)
虽然Dogbert的回答是完全正确的,但我想展示一些可能用于完全消除中间局部变量的技巧。
if
def test do
func1()
|> func2()
|> func3()
|> fn
nil -> nil
var -> func4(var)
end.() # ⇐ call the anonymous function inplace
|> func5()
end
if
这种方法在这种情况下不起作用,因为func4
要求链式变量作为参数传入,但通常情况下if
也可能被链接:
def test do
func1()
|> func2()
|> func3()
|> if(do: nil, else: func4())
|> func5()
end
上面有副作用,并不是== nil
的100%相等,因为false
也是falsey
,但这个例子的优雅让我觉得值得一提
答案 1 :(得分:2)
您可以将if
的返回值直接传递给func5
:
if var1 == nil do
var1
else
func4(var1)
end
|> func5()
答案 2 :(得分:1)
另一个惯用的解决方案是在函数参数上使用模式匹配。在func4(或func4的包装器)上执行此操作将避免任何中间变量:
def test do
func1()
|> func2()
|> func3()
|> func4()
|> func5()
end
def func4(nil), do: nil
def func4(arg) do
# whatever you had in func4
end