【发布时间】:2021-06-13 20:27:36
【问题描述】:
我在 Elixir 应用程序中具有以下功能:
def emojify(%Conv{status: 200, resp_headers: resp_headers} = conv) do
body = if resp_headers["Content-Type"] == "application/json", do: conv.resp_body, else: "????" <> "\n\n" <> conv.resp_body <> "\n\n" <> "????"
%{ conv | resp_body: body }
end
def emojify(%Conv{} = conv), do: conv
我想对其进行重构,以消除其中对 if 的需求。我想这样做的方法是通过模式匹配resp_headers 内的内容类型,但这将是地图内地图的模式匹配(更准确地说是地图内的结构,但我不认为这个细节在这种情况下是相关的),我不知道该怎么做。
我正在尝试类似def emojify(%Conv{status: 200, resp_headers: %{"Content-Type" => "application/json"}} = conv) 的东西,但我知道这只有在resp_headers 里面只有"Content-Type" => "application/json" 时才有效,但事实并非如此。那我该怎么做呢?
【问题讨论】:
-
请记住,HTTP 标头通常不区分大小写,也可能出现多次。因此,您使用的库实际上可能根本不使用映射,而是将它们包装在实现
Access的结构中。 -
现在,我只是从头开始构建东西以了解“Elixir 方式”,所以我没有使用库,也不是用于生产的应用程序。但很高兴知道,我会记住的!