0
File.ls
からファイル/フォルダのリストを取得し、それらにフルパスを追加し、ディレクトリであるかどうかに基づいてフィルタリングするツールを作成しようとしています。か否か。Elixir Enum.mapがEnum.filterにパイプされていません。
これは動作します:
directory_contents = File.ls!(directory_path)
contents_with_full_paths = Enum.map directory_contents, fn(item) -> Path.join(directory_path, item) end
only_dirs = Enum.filter contents_with_full_paths, fn(item) -> File.dir?(item) end
これはしていません:
directory_contents = File.ls!(directory_path)
directory_contents
|> Enum.map fn(item) -> Path.join(directory_path, item) end
|> Enum.filter fn(item) -> File.dir?(item) end
つまり、なぜそれが
** (Protocol.UndefinedError) protocol Enumerable not implemented for #Function<1.10194857/1 in RepoFinder.subdirectories_in/1>, only anonymous functions of arity 2 are enumerable. This protocol is implemented for: Date.Range, File.Stream, Function, GenEvent.Stream, HashDict, HashSet, IO.Stream, List, Map, MapSet, Range, Stream
(elixir) lib/enum.ex:3213: Enumerable.Function.reduce/3
(elixir) lib/enum.ex:1847: Enum.filter/2
を投げますか?これらの2つの実装は、本質的に同じ方法で動作するべきではありませんか?コードがコンパイルされたとき