`function foo end`函数声明的用例?

时间:2018-02-13 16:35:17

标签: julia

像这样的声明是合法的:

julia> function foo end
foo (generic function with 0 methods)

然而,除了占位符来集中文档(我甚至不确定):

module Foo

"""
    foo(...) functions

- foo(n::Int) : do something
- foo(n::Int,m::Int) : do other thing
"""
function foo end

我无法看到此类声明的作用/目标。

问题:是否有说明性用例?

1 个答案:

答案 0 :(得分:4)

Empty generic functions部分的Julia手册对原因进行了解释。主要有两个用途:

  • 简化文档或提高代码可读性;
  • 将接口定义与实现分离。

可以看到randn!randexp!的定义的典型用例。首先定义空的泛型函数,并与文档字符串结合使用。这些函数的下一个方法是动态定义的。

另一个类似的例子是定义randstring

最后看一下strides函数。它在 abstractarray.jl 中定义为空泛型函数,然后在同一文件中使用。但是在此文件中没有为此函数定义任何方法,其他文件例如 dense.jl subarray.jl 定义此类方法。