当通过多个方法传递时,Elixir列表不会更新 def创建(连接,参数)do 康涅狄格州 |>呈现json响应(大容量转换器(参数)) 终止 def bulk_转换器(%%{“文件”=>%Plug.Upload{content_type:“text/csv”,文件名:basename, 路径:fullpath})do 列表=[~w(旧、新)] 完整路径 |>读取csv(列表) |>表格(u)回应 终止 def read_csv(路径、列表)do 如果路径>File.stream!|>Enum.count File.stream! |>Parser.parse_流 |>Stream.map(fn[arg]->%{url:arg}end) |>迭代URL(列表) 其他的 %{错误:%{消息:“超出限制”} 终止 终止 def迭代URL(映射的URL流,列表)执行 映射流 |>枚举每个(fn(url)->url\u转换器(url,列表)结束) %{响应:%{消息:“请求已启动”} 终止 def url_转换器(%{url:val},list)do 使用{:确定,%Route{}=Route}val})do 路线 |>App.redirect\u url |>将_添加到_列表(路线、列表) 终止 终止 def add_to_list(新的_url,%{url:original_url},list)do list=list.insert_at(list,-1,~w(#{original_url},#{new_url})) 列表 终止
每当我尝试使用IO在某处打印列表内容时,列表内容都不会更新。inspect将显示初始列表。 我正在尝试根据从csv解析的数据更新列表的内容,我正在使用灵巧的csv elixir库解析csv 如果我试着在里面打印列表 将\添加到\列表中 在我最初添加的标题和CSV中的最后一行中,只有两行可见当通过多个方法传递时,Elixir列表不会更新 def创建(连接,参数)do 康涅狄格州 |>呈现json响应(大容量转换器(参数)) 终止 def bulk_转换器(%%{“文件”=>%Plug.Upload{content_type:“text/csv”,文件名:basename, 路径:fullpath})do 列表=[~w(旧、新)] 完整路径 |>读取csv(列表) |>表格(u)回应 终止 def read_csv(路径、列表)do 如果路径>File.stream!|>Enum.count File.stream! |>Parser.parse_流 |>Stream.map(fn[arg]->%{url:arg}end) |>迭代URL(列表) 其他的 %{错误:%{消息:“超出限制”} 终止 终止 def迭代URL(映射的URL流,列表)执行 映射流 |>枚举每个(fn(url)->url\u转换器(url,列表)结束) %{响应:%{消息:“请求已启动”} 终止 def url_转换器(%{url:val},list)do 使用{:确定,%Route{}=Route}val})do 路线 |>App.redirect\u url |>将_添加到_列表(路线、列表) 终止 终止 def add_to_list(新的_url,%{url:original_url},list)do list=list.insert_at(list,-1,~w(#{original_url},#{new_url})) 列表 终止,list,elixir,phoenix-framework,List,Elixir,Phoenix Framework,每当我尝试使用IO在某处打印列表内容时,列表内容都不会更新。inspect将显示初始列表。 我正在尝试根据从csv解析的数据更新列表的内容,我正在使用灵巧的csv elixir库解析csv 如果我试着在里面打印列表 将\添加到\列表中 在我最初添加的标题和CSV中的最后一行中,只有两行可见 这里有什么我做错的吗 在add_to_list函数中创建一个新的列表,该函数返回新的列表,但忽略它。数据结构在Elixir中是不变的。检查这个答案:当我知道elixir中的DS是不可变的时,我可以通过对下面的
这里有什么我做错的吗 在
add_to_list
函数中创建一个新的列表
,该函数返回新的列表
,但忽略它。数据结构在Elixir中是不变的。检查这个答案:当我知道elixir中的DS是不可变的时,我可以通过对下面的函数做一个小的更改来解决上面的问题
def create(conn, params) do
conn
|> render_json_response(bulk_convertor(params))
end
def bulk_convertor(%{"file" => %Plug.Upload{content_type: "text/csv", filename: basename,
path: fullpath}}) do
list = [~w(old, new)]
fullpath
|> read_csv(list)
|> form_response
end
def read_csv(path, list) do
if path |> File.stream! |> Enum.count <= 50 do
path
|> File.stream!
|> Parser.parse_stream
|> Stream.map(fn [arg] -> %{url: arg} end)
|> iterate_urls(list)
else
%{error: %{message: "Limit Exceeded"}}
end
end
def iterate_urls(mapped_stream, list) do
mapped_stream
|> Enum.each(fn(url) -> url_convertor(url, list) end)
%{response: %{message: "Request Initiated"}}
end
def url_convertor(%{url: val}, list) do
with {:ok, %Route{} = route} <- App.create_route(%{"url" => val}) do
route
|> App.redirect_url
|> add_to_list(route, list)
end
end
def add_to_list(new_url, %{url: original_url}, list) do
list = List.insert_at(list, -1, ~w(#{original_url}, #{new_url}))
list
end
现在这条线的其余部分保持不变
枚举平面映射(fn(url)->url转换器(url)结束)
我想要的返回列表。谢谢“数据结构在长生不老药中是不可变的”。你应该将@fhdhsni给出的答案标记为正确,而不是张贴你自己的字面意思相同的帖子。是的,我写了@AlekseiMatiushkin。你能告诉我-1的原因吗?堆栈溢出是一个知识库,不是解决问题的工具。答案应该对未来的读者有价值;这个问题的标题会把人们带到这里来寻找标题中所述的问题,而公认的答案提供了所需的所有信息。在这种情况下,您的特定问题的解决方案没有任何意义,因此我推动您删除您的答案。我没有将其作为@fhdhsni链接的问题的副本关闭,因为这里是一个列表,有一个地图,但也许我应该。
def iterate_urls(mapped_stream) do
mapped_stream
|> Enum.flat_map(fn(url) -> url_convertor(url) end)
|> dump_to_csv
%{response: %{message: "Request Initiated"}}
end