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


Elixir Kernel.SpecialForms.import用法及代码示例


Elixir语言中 Kernel.SpecialForms.import 相关用法介绍如下。

用法:

import(module, opts)
(宏)

从其他模块导入函数和宏。

import/2 允许人们在不使用限定名称的情况下轻松访问其他模块的函数或宏。

例子

如果您使用给定模块中的多个函数,则可以导入这些函数并将它们作为本地函数引用,例如:

iex> import List
iex> flatten([1, [2], 3])
[1, 2, 3]

选择器

默认情况下,Elixir 从给定模块导入函数和宏,除了以下划线开头的函数和宏(通常是回调):

import List

开发人员可以通过唯一选项过滤以仅导入宏或函数:

import List, only: :functions
import List, only: :macros

或者,Elixir 允许开发人员将名称/参数对传递给 :only:except 作为对导入(或不导入)内容的细粒度控制:

import List, only: [flatten: 1]
import String, except: [split: 2]

再次导入相同的模块将删除以前的导入,除非使用了 except 选项,该选项始终对先前声明的 import/2 是独占的。如果没有先前的导入,则它适用于模块中的所有函数和宏。例如:

import List, only: [flatten: 1, keyfind: 4]
import List, except: [flatten: 1]

在上面的两次导入调用之后,只会导入 List.keyfind/4

下划线函数

默认情况下,不导入以_ 开头的函数。如果您确实要导入以_ 开头的函数,则必须将其显式包含在:only 选择器中。

import File.Stream, only: [__build__: 3]

词法范围

重要的是要注意 import/2 是词法的。这意味着您可以在特定函数中导入特定宏:

defmodule Math do
  def some_function do
    # 1) Disable "if/2" from Kernel
    import Kernel, except: [if: 2]

    # 2) Require the new "if/2" macro from MyMacros
    import MyMacros

    # 3) Use the new macro
    if do_something, it_works
  end
end

在上面的示例中,我们从 MyMacros 导入宏,在该特定函数中用我们自己的替换原来的 if/2 实现。该模块中的所有其他函数仍然可以使用原始函数。

警告

如果你导入一个模块并且你没有使用任何从这个模块导入的函数或宏,Elixir 会发出一个警告,暗示这个导入没有被使用。

如果导入是由宏自动生成的,Elixir 不会发出任何警告,因为导入没有明确定义。

可以通过将 :warn 选项显式设置为 truefalse 来更改这两种警告行为。

模棱两可的函数/宏名称

如果两个模块 AB 被导入,并且它们都包含一个 foo 函数,其参数为 1 ,那么只有在实际调用了 foo/1 时才会发出错误;也就是说,错误是懒惰地发出的,而不是即刻地发出的。

相关用法


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