是否有碘酒的长生不老药保护条款

时间:2016-09-08 09:48:02

标签: erlang elixir

我有一个可以接受任何io_data的功能,因为它会通过http连接发送它。目前我有一个is_binary保护条款但这个限制性太强了。

那么是否有一个保护条款可以检查是否有io_data?

e.g。

def do_the_stuff(content) when is_iodata(content) do
  # e.g.
  IO.puts(content)
end

2 个答案:

答案 0 :(得分:2)

对此没有具体的警惕。通常库使用 when is_binary(iodata) or is_list(iodata)

答案 1 :(得分:1)

没有办法在警卫中捕获无效的碘值条款。 is_binary(content) or is_list(content)尽可能接近。

如果您想在发送之前检查该术语是否为有效的iodata,您可以致电IO.iodata_length,并检查它是否引发错误。这比将碘伏转换为二进制文件便宜,但确实会产生以前没有的成本。考虑到如果数据无效,底层库应该引发错误,这可能是不值得的。