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 methodse.q。
julia> same_type(x::T, y::T) where {T} = true
- function-like objects 例如
julia> function (p::Polynomial)(x) ... end
据我所知没有"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
。
从 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 methodse.q。
julia> same_type(x::T, y::T) where {T} = true
- function-like objects 例如
julia> function (p::Polynomial)(x) ... end
据我所知没有"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
。