在Elixir中的defstruct中使用@type指令。未对该字段执行运行时类型检查
我理解如何使用@type指令定义用户定义的类型。到目前为止,我只在函数规范中见过它的用法。我很想知道它的使用是否可以扩展到结构,使参数和数据类型之间紧密耦合 我开始用一个示例程序进行探索在Elixir中的defstruct中使用@type指令。未对该字段执行运行时类型检查,elixir,Elixir,我理解如何使用@type指令定义用户定义的类型。到目前为止,我只在函数规范中见过它的用法。我很想知道它的使用是否可以扩展到结构,使参数和数据类型之间紧密耦合 我开始用一个示例程序进行探索 iex(1)> defmodule Result do ...(1)> @type t ::%__MODULE__{ status: String.t, value: integer} ...(1)> defstruct status: "OK", value: 100 ...(1)&
iex(1)> defmodule Result do
...(1)> @type t ::%__MODULE__{ status: String.t, value: integer}
...(1)> defstruct status: "OK", value: 100
...(1)> end
我在这里的理解是,结果是一个结构,状态字段是字符串,值字段是整数
iex(2)> %Result{}
%Result{status: "OK", value: 100}
然而,令我惊讶的是,当我尝试输入不同的数据类型时,编译器并没有抛出任何类型的错误,并且对输入数据感到满意
iex(3)>res = %Result{status: 555, value: "blahblah"}
%Result{status: 555, value: "blahblah"}
文档建议为结构定义类型。但当它打开一个错误窗口时,我看不透这一点。
你能分享一下你的想法吗 恐怕您对字体规格的用途感到困惑 Elixir是一种动态类型语言,因此编译器不会真正检查类型规范。这就是erlang文档关于这些的用法所说的: 类型信息可用于以下方面:
- 记录功能接口
- 为缺陷检测工具(如透析器)提供更多信息
- 由文档工具(如EDoc)利用,以生成各种形式的程序文档
透析器
,它可能会抱怨到处传递spec invalid struct