协议 Enumerable 未实现 - Elixir
Protocol Enumerable not implemented for - Elixir
我正在学习本教程building-a-simple-stream-media-app
当我将列表更改为 Struct 时 不太确定我在做什么,对此真的很陌生。 它不起作用,请继续
protocol Enumerable not implemented
我的控制器
defmodule Blog.PageController do
use Blog.Web, :controller
def index(conn, _params) do
media_dir = "./priv/static/media/"
filetype = [".mp4", ".png"]
{:ok, files} = File.ls(media_dir)
filtered_files = Enum.filter(files, fn(file) -> String.ends_with?(file, [".mp4", ".png"]) end)
struct_files = Enum.map(filtered_files, fn(file) -> %Blog.Media{filename: file} end )
render conn, "index.html", files: struct_files
end
def show(conn, %{"filename" => filename}) do
render conn, "show.html", filename: filename
end
end
型号
defmodule Blog.Media do
@derive {Phoenix.Param, key: :filename}
defstruct [:filename]
end
您不能在他提到 Elixir 1.1 的教程中派生 Enumerable,但教程 github 使用 1.0 - 另请参阅此问题。 https://github.com/elixir-lang/elixir/issues/3821。只是 return 一个映射而不是一个结构。
def index(conn, _params) do
render conn, "index.html", files: media_files
end
defp media_files do
media_dir = "</your/file_path/>"
{:ok, files} = File.ls(media_dir)
filetype = [".mp4", ".mp3"]
Enum.filter(files, fn(file) ->
String.ends_with?(file, filetype)
end)
|> Enum.map(fn(file) ->
%{filename: file} # Map
end)
end
我正在学习本教程building-a-simple-stream-media-app
当我将列表更改为 Struct 时 不太确定我在做什么,对此真的很陌生。 它不起作用,请继续
protocol Enumerable not implemented
我的控制器
defmodule Blog.PageController do
use Blog.Web, :controller
def index(conn, _params) do
media_dir = "./priv/static/media/"
filetype = [".mp4", ".png"]
{:ok, files} = File.ls(media_dir)
filtered_files = Enum.filter(files, fn(file) -> String.ends_with?(file, [".mp4", ".png"]) end)
struct_files = Enum.map(filtered_files, fn(file) -> %Blog.Media{filename: file} end )
render conn, "index.html", files: struct_files
end
def show(conn, %{"filename" => filename}) do
render conn, "show.html", filename: filename
end
end
型号
defmodule Blog.Media do
@derive {Phoenix.Param, key: :filename}
defstruct [:filename]
end
您不能在他提到 Elixir 1.1 的教程中派生 Enumerable,但教程 github 使用 1.0 - 另请参阅此问题。 https://github.com/elixir-lang/elixir/issues/3821。只是 return 一个映射而不是一个结构。
def index(conn, _params) do
render conn, "index.html", files: media_files
end
defp media_files do
media_dir = "</your/file_path/>"
{:ok, files} = File.ls(media_dir)
filetype = [".mp4", ".mp3"]
Enum.filter(files, fn(file) ->
String.ends_with?(file, filetype)
end)
|> Enum.map(fn(file) ->
%{filename: file} # Map
end)
end