【问题标题】:How to know which module exports a certain function如何知道哪个模块导出了某个功能
【发布时间】:2022-01-17 17:44:20
【问题描述】:

我在阅读这个 Flux.jl 教程时遇到了一个叫做 Chain 的东西。

m = Chain(Dense(10, 5, relu), Dense(5, 2), softmax)

它不是从任何使用的模块导入的,也没有使用命名空间,所以我不知道它属于哪个模块。虽然我设法发现我属于 Flux 包,但我想知道在脚本中是否有一种通用的方法来解决这个问题。

【问题讨论】:

    标签: module package julia flux.jl


    【解决方案1】:

    要找出特定函数的来源,您可以使用parentmodule 函数:

    julia> parentmodule(Chain)
    Flux
    

    在 Julia 文档中了解更多信息:https://docs.julialang.org/en/v1/base/base/#Base.parentmodule

    【讨论】:

    • 这简直太完美了,谢谢!
    【解决方案2】:

    请注意,正如文档所述,parentmodule(<function>) 仅返回包含函数的 first 定义的模块,这可能不一定是我们关心的那个。在这种情况下,这无关紧要,因为 Chain 仅在 Flux 中具有定义,但有时一个函数在多个包中具有定义,而应用哪个包取决于参数的类型。

    parentmodule 也可以帮助你,如果你将参数的类型传递给它(例如parentmodule(Chain, (Dense, Dense, Function)) 这里),但我通常倾向于使用@which 宏:

    julia> @which Chain(Dense(10, 5, relu), Dense(5, 2), softmax)
    Chain(xs...) in Flux at /home/Sundar/.julia/packages/Flux/BPPNj/src/layers/basic.jl:33
    
    

    输出稍微嘈杂,但它告诉您应用了函数的哪个特定方法,它来自哪个模块,以及您可以在哪里找到方法定义。

    【讨论】:

    • 这非常有用,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多