Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 有没有办法获得模块中定义的函数列表?_Julia - Fatal编程技术网

Julia 有没有办法获得模块中定义的函数列表?

Julia 有没有办法获得模块中定义的函数列表?,julia,Julia,有没有什么内省魔法可以给我一个模块中定义的函数列表 module Foo function foo() "foo" end function bar() "bar" end end 一些神秘的功能,如: functions_in(Foo) 这将返回:[foo,bar]这里的问题是名称和whos都列出了从模块导出的名称。如果你想看到他们,那么你需要做如下事情: module Foo export foo, bar function foo() "fo

有没有什么内省魔法可以给我一个模块中定义的函数列表

module Foo
  function foo()
    "foo"
  end
  function bar()
    "bar"
  end
end
一些神秘的功能,如:

functions_in(Foo)

这将返回:[foo,bar]

这里的问题是
名称和
whos
都列出了从模块导出的名称。如果你想看到他们,那么你需要做如下事情:

module Foo

export foo, bar

function foo()
    "foo"
end
function bar()
    "bar"
end
end  # module
此时,
姓名
都会列出所有内容

如果您碰巧在REPL工作,并且出于任何原因不想导出任何名称,您可以通过键入
Foo.[TAB]
以交互方式检查模块的内容。请参阅本课程的示例:

julia> module Foo
         function foo()
           "foo"
         end
         function bar()
           "bar"
         end
       end

julia> using Foo

julia> whos(Foo)
Foo                           Module

julia> names(Foo)
1-element Array{Symbol,1}:
 :Foo

julia> Foo.
bar  eval  foo
不知何故,选项卡完成是在查找未导出的名称,所以一定有办法让Julia告诉您这些名称。我只是不知道这个函数是什么

编辑
我挖了一下。未导出的函数
Base.REPLCompletions.completions
似乎可以工作,正如我们之前使用的REPL会话的继续部分所示:

julia> function functions_in(m::Module)
           s = string(m)
           out = Base.REPLCompletions.completions(s * ".", length(s)+1)

           # every module has a function named `eval` that is not defined by
           # the user. Let's filter that out
           return filter(x-> x != "eval", out[1])
       end
functions_in (generic function with 1 method)

julia> whos(Foo)
Foo                           Module

julia> names(Foo)
1-element Array{Symbol,1}:
 :Foo

julia> functions_in(Foo)
2-element Array{UTF8String,1}:
 "bar"
 "foo"

@iaindanning:I尝试了names(Foo),但它只返回:Foo对于构建函数,我正在尝试创建一个包含示例的列表:您可能会发现它很有用。如果有兴趣的话,我会把它扩展到流行的模块。你需要使用
名称(M,true)
来获得未报告的符号。@Isaiah,评论不错。我不知道这个选项。对于Julia 1.2@IsaiahNorton,有用的注释应该是
names(M,all=true)