当前位置:  开发笔记 > 编程语言 > 正文

Elixir是否支持内省以显示功能来源?

如何解决《Elixir是否支持内省以显示功能来源?》经验,为你挑选了1个好方法。

如果一个模块import是多个其他模块,那么给定函数的来源可能并不明显.例如:

defmodule Aimable do
  import Camera
  import Gun

  def trigger do
    shoot # which import brought it in?
  end
end

我知道有办法最大限度地减少这种混乱:良好的命名,专注的模块,有针对性的导入等import Gun, only: [:shoot].

但是,如果我遇到这样的代码,有没有办法检查Aimable并查看函数的来源shoot



1> coderVishal..:

你可以直接这样做:

# from inside the module; IO.inspect(&Aimable.shoot/0) reveals nothing
IO.inspect &shoot/0 #=> &Gun.shoot/0

看一下这个

还要记住,在两个不同的模块中,不能将相同的函数名具有相同的arity,并将它们导入到另一个模块中.调用该函数时,这将导致歧义错误.

另一种痛苦的方式.你可以使用function_exported?/ 3..眼镜:

function_exported?(atom | tuple, atom, arity) :: boolean

如果模块已加载并且包含具有给定arity的公共函数,则返回true,否则返回false.

例子:

function_exported?(Gun,    :shoot, 0) #=> true
function_exported?(Camera, :shoot, 0) #=> false

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有