Julia 中的参数函子

Parametric functors in Julia

从 0.6 开始,可以使用 where 语法在 Julia 中创建参数方法。根据 release notes of 0.6 版本,where 语法

can be used anywhere a type is accepted

现在考虑以下人为的示例:

function (rng::R)() where {R <: Range}
    return first(rng)
end

当我尝试编译它时,出现以下错误:

ERROR: function type in method definition is not a type

所以我的问题是在 Julia 0.6+ 中创建参数函子的正确方法是什么?

你混淆了两件事

据我所知没有"parametric function-like objects"

但是,下面的代码应该与您的意图相同。

Julia> function (rng::Range)()
         return first(rng)
       end

       cannot add methods to an abstract type

目前的文档没有提到类函数对象对具体类型的任何限制,但不幸的是 Julia 无论如何都不接受它。

好的,我基本上明白你想做什么了。要理解 functors,这里有一个简短的示例代码。

julia> struct Student
           name::String
       end

julia> function (::Student)()
           println("Callable of Student Type!")
       end

julia> object = Student("JuliaLang")
Student("JuliaLang")

julia> object()
Callable of Student Type!

但是当我尝试创建参数仿函数时,它抛出了与您的错误类似的错误!

julia> function (::T)() where {T <: Student}
           println("Callable of Student Type!")
       end
ERROR: function type in method definition is not a type

正如@gnimuc 正确指出的那样,这个问题实际上仍然OPEN