【发布时间】:2018-10-16 23:04:48
【问题描述】:
Elixir 和一般函数式编程的初学者。
我正在尝试使用库Pdftk 创建一个 FDF 文档来填写现有的 PDF 表单。
认为我以错误的方式解决这个问题,并使用已知的 OOP 逻辑,而不是遵循 elixir 的逻辑。
defp generate_fdf(filename, fields) do
fdf = fdf_header()
|> fdf_content(fields)
File.write!("./tmp/test.fdf", fdf_footer(to_string(fdf)))
IO.puts fdf_footer(to_string(fdf))
end
defp fdf_header() do
"%FDF-1.2\n1 0 obj<</FDF<< /Fields["
end
defp fdf_content(file_content, fields) do
Enum.map fields, fn {k, v} ->
file_content <> "\n" <> "<< /T (#{k}) /V (#{v}) >>"
end
end
defp fdf_footer(file_content) do
file_content <> "\n] >> >>\nendobj\ntrailer\n<</Root 1 0 R>>\n%%EOF"
end
目前 generate_fdf 的输出将导致:
%FDF-1.2
1 0 obj<</FDF<< /Fields[
<< /T (first_name) /V (George) >>%FDF-1.2
1 0 obj<</FDF<< /Fields[
<< /T (last_name) /V (Das) >>
] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF
表示fdf_header() 出现两次。
提前致谢。如果答案包含递归并且是长生不老药的惯用语,则加分。 :)
【问题讨论】:
标签: dictionary recursion functional-programming elixir phoenix-framework