elixir - 在 Elixir 中如何检查变量的类型

标签 elixir

在 Elixir 中如何检查类型,例如在 Python 中:

>>> a = "test"
>>> type(a)
<type 'str'>
>>> b =10
>>> type(b)
<type 'int'>

我在 Elixir 中读到有类型检查器,例如“is_bitstring”、“is_float”、“is_list”、“is_map”等,但是如果您不知道类型可能是什么怎么办?

最佳答案

从 elixir 1.2 开始,iex 中有一个 i 命令,它将列出任何 Elixir 变量的类型和更多信息。

iex> foo = "a string" 
iex> i foo 
Term
 "a string"
Data type
 BitString
Byte size
 8
Description
 This is a string: a UTF-8 encoded binary. It's printed surrounded by
 "double quotes" because all UTF-8 encoded codepoints in it are        printable.
Raw representation
  <<97, 32, 115, 116, 114, 105, 110, 103>>
Reference modules
  String, :binary

如果您查看 i 命令的代码,您会发现这是通过协议(protocol)实现的。

https://github.com/elixir-lang/elixir/blob/master/lib/iex/lib/iex/info.ex

如果您想在 Elixir 中为任何数据类型实现一个函数,方法是为您希望该函数处理的所有数据类型定义一个协议(protocol)并实现该协议(protocol)。不幸的是,你不能在守卫中使用协议(protocol)函数。然而,简单的“类型”协议(protocol)实现起来非常简单。

关于elixir - 在 Elixir 中如何检查变量的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28377135/

相关文章:

elixir - 如何在 Elixir 中按关键字拆分列表

process - 在 elixir 中创建一个假的或虚拟的 pid

elixir - Ecto 连接动态构建的条件

postgresql - Elixir UUID。 UUID不匹配时如何处理500错误

erlang - 在 erlang 进程之间发送消息 : Atoms vs Binaries

elixir - Elixir 中的编译模块属性

elixir - 为什么我需要 `require` 一个已经编译和加载的模块?

elixir - 使用加载应用程序启动 "iex",并在 1 行中运行命令

elixir - Elixir :模式匹配或守卫

elixir - Poison.Encoder 如何预加载关联?