function_module(f::Function, types) -> Module

Determine the module containing a given definition of a generic function.


julia> function_module(f::Function, types)
           m = @which f(types)
           return parentmodule(m)


  1. Find the module of a built-in function:

    julia> module_of_sin = function_module(sin, (Float64,))

    In this example, we use the function_module function to determine the module of the sin function for the Float64 type.

  2. Find the module of a user-defined function:
    julia> function greet(name)
           println("Hello, $name!")

julia> module_of_greet = function_module(greet, (String,)) Main

Here, we define a simple function `greet` and use `function_module` to find its module for the `String` argument type.

3. **Handling generic functions with multiple methods:**
julia> function add_numbers(a::Int, b::Int)
           return a + b

julia> function add_numbers(a::Float64, b::Float64)
           return a + b

julia> module_of_add = function_module(add_numbers, (Int, Int))

In this example, we have a generic function add_numbers with multiple methods. We use function_module to find the module of the specific method that matches the input types (Int, Int).

Common mistake example:

julia> module_of_abs = function_module(abs, (String,))
ERROR: MethodError: no method matching abs(::Type{String})

Here, the mistake is providing the argument type (String,) which does not match any method of the abs function. Make sure to provide the correct argument types for the function you are querying.

See Also

assert, backtrace, code_llvm, code_lowered, code_native, code_typed, code_warntype, :@which, compilecache, current_module, eval, finalize, finalizer, fullname, function_module, function_name, include_dependency, InterruptException, invoke, isconst, isdefined, isgeneric, methodswith, method_exists, module_name, module_parent, require, subtypes, unsafe_load, workspace, __precompile__,

User Contributed Notes

Add a Note

The format of note supported is markdown, use triple backtick to start and end a code block.

*Required Field

Checking you are not a robot: