Elixir 将参数传递给函数并通过"&&引用;
有没有办法缩短这些类型的方法调用:Elixir 将参数传递给函数并通过"&&引用;,elixir,Elixir,有没有办法缩短这些类型的方法调用: aaa = Enum.find(Statuses, fn(x) -> x.name == :pending end) 对这样的事情: aaa = Enum.find(Statuses, &==, [:name, :pending]) 也就是说,要将算术运算符“==”、结构字段名name和值:pending作为参数传递 您可以使用: aaa = Enum.find(Statuses, &(&1.name == :pending
aaa = Enum.find(Statuses, fn(x) -> x.name == :pending end)
对这样的事情:
aaa = Enum.find(Statuses, &==, [:name, :pending])
也就是说,要将算术运算符“==”、结构字段名name
和值:pending
作为参数传递 您可以使用:
aaa = Enum.find(Statuses, &(&1.name == :pending))
或
iex(1)>f=&(&1.name==:待定)
#作用
iex(2)>f.({name::pending})
真的
iex(3)>f.({name::complete})
假的
您可以使用:
aaa = Enum.find(Statuses, &(&1.name == :pending))
或
iex(1)>f=&(&1.name==:待定)
#作用
iex(2)>f.({name::pending})
真的
iex(3)>f.({name::complete})
假的
此外,Dogbert的答案非常完美,像往常一样,为了格式化,我也会把我的答案放在这里
这是一个完美的例子,当长生不老药“阻止”你做错事。如果手头上没有这样的方法,这几乎意味着这种方法是错误的
您正在寻找一个结构,该结构具有名称
值:pending
。使用宏显式执行此操作:
引用文件: 在筛选查找枚举中的值时非常有用:
list = [{:a, 1}, {:b, 2}, {:a, 3}]
Enum.filter list, &match?({:a, _}, &1)
#⇒ [{:a, 1}, {:a, 3}]
另外,Dogbert的答案是完美的,像往常一样,为了格式化,我也会把我的答案放在这里 这是一个完美的例子,当长生不老药“阻止”你做错事。如果手头上没有这样的方法,这几乎意味着这种方法是错误的 您正在寻找一个结构,该结构具有
名称
值:pending
。使用宏显式执行此操作:
引用文件: 在筛选查找枚举中的值时非常有用:
list = [{:a, 1}, {:b, 2}, {:a, 3}]
Enum.filter list, &match?({:a, _}, &1)
#⇒ [{:a, 1}, {:a, 3}]
不幸的是,这是不正确的:
[%{n:1,name::complete},%{n:2,name::pending}]|>Enum.find(&%{name::pending}=&1)#=>**(MatchError)右侧值不匹配:%{n:1,name::complete}
@Dogbert确实,但这看起来很傻。它可能会起作用(可能不是那样,但是使用其他一些Enum.select/2
或类似的方法。)我将删除此答案,并填充一个功能请求。不幸的是,这是不正确的:[%{n:1,name::complete},%{n:2,name::pending}]|>Enum.find(&%{name::pending}=&1)#=>**(MatchError)右边的值不匹配:%{n:1,name::complete}
@Dogbert确实如此,但这在我看来很愚蠢。它可能会起作用(可能不是那样,但是使用其他的Enum.select/2
或类似的方法)。我将删除这个答案,并完成一个功能请求。
list = [{:a, 1}, {:b, 2}, {:a, 3}]
Enum.filter list, &match?({:a, _}, &1)
#⇒ [{:a, 1}, {:a, 3}]