有没有办法直接从Elixir中的元组返回值?
给定一个返回元组的函数,有没有办法在同一行从该元组中提取并返回特定值?我经常发现自己在长生不老药中使用这种模式,我想知道是否有一种速记方法可以达到同样的效果 例如,我在下面的函数中拾取并返回有没有办法直接从Elixir中的元组返回值?,elixir,Elixir,给定一个返回元组的函数,有没有办法在同一行从该元组中提取并返回特定值?我经常发现自己在长生不老药中使用这种模式,我想知道是否有一种速记方法可以达到同样的效果 例如,我在下面的函数中拾取并返回result: def foo() do {:ok, result} = get_result() result end 有没有办法在该方法中不需要第二行代码?您可以使用elem/2获取术语的第二项: def foo() do get_result() |> elem(1) end 但这
result
:
def foo() do
{:ok, result} = get_result()
result
end
有没有办法在该方法中不需要第二行代码?您可以使用
elem/2
获取术语的第二项:
def foo() do
get_result() |> elem(1)
end
但这不会像原始代码那样断言元组的第一个元素是:ok
。如果您还想断言这一点,您可以定义并重用一个简单的函数:
def foo do
get_result() |> extract()
end
def extract({:ok, term}), do: term
def extract(_), do: :error # raise an error here if you want
您可以使用
elem/2
获取术语的第二项:
def foo() do
get_result() |> elem(1)
end
但这不会像原始代码那样断言元组的第一个元素是:ok
。如果您还想断言这一点,您可以定义并重用一个简单的函数:
def foo do
get_result() |> extract()
end
def extract({:ok, term}), do: term
def extract(_), do: :error # raise an error here if you want
您可以在一行中对其进行编码:
关于此处使用的几种语法糖的更多详细信息:
- 在中编写函数
- 将第一个函数的结果流到第二个函数的第一个参数中:
fun1()|>fun2()
- 使用以下语法创建具有一个参数的匿名函数:
(&()).()
- 模拟三元条件:
与A&&B|C
if A do B else C end
关于此处使用的几种语法糖的更多详细信息:
- 在中编写函数
- 将第一个函数的结果流到第二个函数的第一个参数中:
fun1()|>fun2()
- 使用以下语法创建具有一个参数的匿名函数:
(&()).()
- 模拟三元条件:
与A&&B|C
if A do B else C end
这是一种用长生不老药编码高尔夫的奇特方式。但是,您会失去可读性。处理此问题的典型方法是使用:
def foo(),do:with{:ok,result}处理此问题的典型方法是使用:
def foo(),do:with{:ok,result}一行完全相同的操作可能不会那么难看:def foo(),do:with{:ok,result}:error)
。您向我展示了一个更好的解决方案。然而,我喜欢这样一个事实,即有一种黑客可以将数据流传输到匿名函数中。Oneliner做完全相同的事情可能不会那么难看:def foo(),do:with{:ok,result}:error)
。您向我展示了一个更好的解决方案。然而,我喜欢这样一个事实,即有一种黑客可以将流传输到匿名函数中。