gpt4 book ai didi

elixir - Elixir 是否支持自省(introspection)以显示函数起源?

转载 作者:行者123 更新时间:2023-12-04 13:59:02 24 4
gpt4 key购买 nike

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

defmodule Aimable do
import Camera
import Gun

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

我知道有一些方法可以最大限度地减少这种混淆:良好的命名、专注的模块、有针对性的导入,如 import Gun, only: [:shoot] , ETC。

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

最佳答案

你可以直接这样做:

# from inside the module; IO.inspect(&Aimable.shoot/0) reveals nothing
IO.inspect &shoot/0 #=> &Gun.shoot/0
Check this out
另请记住,您不能在两个不同的模块中具有相同的函数名称和相同的数量,并将它们都导入另一个模块。这将导致调用该函数时出现歧义错误。
另一种痛苦的方式。您可以使用 function_exported?/3. .眼镜:

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

Returns true if the module is loaded and contains a public function with the given arity, otherwise false.


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

关于elixir - Elixir 是否支持自省(introspection)以显示函数起源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34325206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com