Erlang iodata是否有灵丹妙药保护条款

Erlang iodata是否有灵丹妙药保护条款,erlang,elixir,Erlang,Elixir,我有一个函数,它可以接收任何io_数据,而不接收任何其他数据,因为它将通过http连接发送数据。目前我有一个is_binaryguard子句,但这太严格了 那么是否有一个保护子句来检查某个东西是否是io_数据 e、 g 没有专门的警卫。图书馆通常使用 什么时候是二进制(iodata)或者是列表(iodata)没有专门的保护。图书馆通常使用 当是二进制(iodata)或是列表(iodata)时,无法在保护中捕获无效的iodata术语是二进制(内容)或是列表(内容)尽可能接近 如果要在发送术语之前检

我有一个函数,它可以接收任何io_数据,而不接收任何其他数据,因为它将通过http连接发送数据。目前我有一个
is_binary
guard子句,但这太严格了

那么是否有一个保护子句来检查某个东西是否是io_数据

e、 g


没有专门的警卫。图书馆通常使用
什么时候是二进制(iodata)或者是列表(iodata)

没有专门的保护。图书馆通常使用
当是二进制(iodata)或是列表(iodata)

时,无法在保护中捕获无效的iodata术语<代码>是二进制(内容)或是列表(内容)尽可能接近


如果要在发送术语之前检查它是否有效,可以调用
IO.iodata_length
,并检查它是否不会引发错误。这比将iodata转换为二进制文件要便宜,但会带来以前没有的成本。考虑到如果数据无效,底层库应该会引发错误,这可能不值得这么做。

无法在保护中捕获无效的iodata术语<代码>是二进制(内容)或是列表(内容)尽可能接近


如果要在发送术语之前检查它是否有效,可以调用
IO.iodata_length
,并检查它是否不会引发错误。这比将iodata转换为二进制文件要便宜,但会带来以前没有的成本。考虑到如果数据无效,底层库可能会引发错误,这可能不值得。如果您有一个映射列表
[%{}]
,那么它不会通过并且不是io_数据吗?是的,它会。另外,
is_binary(IoData)
如果它真的是一个IoData-parts的列表,那么它将不起作用。IoData是iolist或binary,因此is_binary(IoData)是guard子句的合理部分。是的-这可能会传递一些误报,不幸的是这是无法避免的-elixir不是一种静态类型的语言。如果你有一个映射列表
[%{}]
,那么它不会传递并且不是io_数据吗?是的,它会。另外,
is_binary(IoData)
如果它真的是一个IoData-parts的列表,那么它将不起作用。IoData是iolist或binary,因此is_binary(IoData)是guard子句的合理部分。是的,这会传递一些误报,不幸的是这是无法避免的,elixir不是一种静态类型的语言。
def do_the_stuff(content) when is_iodata(content) do
  # e.g.
  IO.puts(content)
end