For loop 从列表中不返回任何内容

For loop 从列表中不返回任何内容,for-loop,elixir,list-comprehension,return-value,side-effects,For Loop,Elixir,List Comprehension,Return Value,Side Effects,假设您有以下列表: 对于i Enum.map(&(&1*&1+&1),我不能说这有多惯用,但是如果您担心效率,您可以创建一个实现可收集的结构,但实际上不做任何工作 defmodule NoCollect do defstruct [] end defimpl Collectable, for: NoCollect do def into(pool) do {pool, fn expr, {:cont, _} -> expr expr, :done

假设您有以下列表:


对于i Enum.map(&(&1*&1+&1),我不能说这有多惯用,但是如果您担心效率,您可以创建一个实现可收集的结构,但实际上不做任何工作

defmodule NoCollect do
  defstruct []
end

defimpl Collectable, for: NoCollect do
  def into(pool) do
    {pool, fn
      expr, {:cont, _} -> expr
      expr, :done -> expr
      _   , :halt -> :ok
    end}
  end
end
那么你可以这样使用它

for ..., into: %NoCollect{} do
  # ...
end

从技术上讲,您仍然可以得到一个理解对象,但现在它将是一个微不足道的
%NoCollect{}
对象,不管循环运行多少次,而不是实际累积然后丢弃值。

我说不出这有多惯用,但是如果您担心效率,您总是可以创建一个实现
可收集的结构,但实际上不做任何工作

defmodule NoCollect do
  defstruct []
end

defimpl Collectable, for: NoCollect do
  def into(pool) do
    {pool, fn
      expr, {:cont, _} -> expr
      expr, :done -> expr
      _   , :halt -> :ok
    end}
  end
end
那么你可以这样使用它

for ..., into: %NoCollect{} do
  # ...
end

从技术上讲,您仍然可以得到一个理解对象,但现在它将是一个微不足道的
%NoCollect{}
对象,无论循环运行多少次,而不是实际累积然后丢弃值。

如果这是关于为大型
n
建立返回的内存消耗,我想您也应该避免
Enum.map
超过
2..n

你试过使用流吗

2..n
|> Stream.map(& &1*&1 + &1)
|> Stream.filter(& &1 <= :math.sqrt(n))
|> Enum.each(& Refrigerator.put(pid, &1, "this is my food"))
2..n
|>Stream.map(&&1*&1+&1)
|>Stream.filter(&&1 Enum.each(&冰箱.put(pid,&1,“这是我的食物”))

如果这是关于建立大型
n
的回报的内存消耗,我想您也应该避免
Enum.map
超过
2..n

你试过使用流吗

2..n
|> Stream.map(& &1*&1 + &1)
|> Stream.filter(& &1 <= :math.sqrt(n))
|> Enum.each(& Refrigerator.put(pid, &1, "this is my food"))
2..n
|>Stream.map(&&1*&1+&1)
|>Stream.filter(&&1 Enum.each(&冰箱.put(pid,&1,“这是我的食物”))

谢谢-对于大型
n
来说,这就决定了机器内存的最大化,还是执行一个有副作用的理解。我认为更好的问题是,为什么有人只想运行一个有副作用的理解。这似乎最好用map、reduce或其他有趣的方法来处理这就决定了一台机器的内存耗尽,还是执行一个有副作用的理解。我认为更好的问题是,为什么有人只想运行一个有副作用的理解。这似乎最好用map或reduce或reduce来处理该系列中的其他一些功能。如果您使用列表理解来产生副作用,我建议您明智地查看map或reduce。如果您使用列表理解来产生副作用,我建议您明智地查看map或reduce。谢谢,现在我看到这里迭代的关键是
Enum.each
.Thanks,现在我看到这里迭代的关键是
Enum.each