当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Module.create用法及代码示例


Elixir语言中 Module.create 相关用法介绍如下。

用法:

create(module, quoted, opts)
@spec create(module(), Macro.t(), Macro.Env.t() | keyword()) ::
  {:module, module(), binary(), term()}

创建具有给定名称并由给定引用表达式定义的模块。

定义模块的行及其文件必须作为选项传递。

它返回一个形状为 {:module, module, binary, term} 的元组,其中 module 是模块名称,binary 是模块字节码,termquoted 中最后一个表达式的结果。

Kernel.defmodule/2 类似,如果在当前正在编译的文件中调用 Module.create/3 ,二进制文件将仅作为 .beam 文件写入磁盘。

例子

contents =
  quote do
    def world, do: true
  end

Module.create(Hello, contents, Macro.Env.location(__ENV__))

Hello.world()
#=> true

defmodule 的区别

Module.create/3 的工作方式与 Kernel.defmodule/2 类似,并返回相同的结果。虽然也可以使用defmodule 来动态定义模块,但当模块主体由带引号的表达式给出时,此函数是首选。

另一个重要区别是 Module.create/3 允许您控制定义模块时使用的环境变量,而 Kernel.defmodule/2 自动使用调用它的环境。

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Module.create(module, quoted, opts)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。