Dbo*_*iao 4 methods types function julia
我最近浏览了一些Julia的源代码,发现一些函数对我来说似乎很神秘.
在Julia源代码中定义了一些函数,它们没有参数但是有类型注释.
例如:abstractarray.jl中的第20行
我尝试了一下这个ndims功能,
似乎ndims可以将类型本身作为参数并返回正确的值:
julia> ndims(AbstractArray{Float64, 2})
2
julia> ndims([1.1 0.3; 0. 0.5])
2
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下(::DataType)方法的工作原理吗?或者朱莉娅的意思是什么?
Isa*_*ton 12
在Julia中探索函数的行为时,了解调用哪种特定方法很重要.Julia是围绕多个调度组织的,因此单个名称ndims可能与不同的实现相关联 - 由参数类型选择.要了解如何ndims实现,我们可以使用@which宏来确定为特定调用选择的实现:
julia> @which ndims(AbstractArray{Float64, 2})
ndims{T,n}(::Type{AbstractArray{T,n}}) at abstractarray.jl:61
julia> @which ndims([1.1 0.3; 0. 0.5])
ndims{T,n}(::AbstractArray{T,n}) at abstractarray.jl:60
Run Code Online (Sandbox Code Playgroud)
目前的实现abstractarray.jl如下:
ndims{T,n}(::AbstractArray{T,n}) = n
ndims{T,n}(::Type{AbstractArray{T,n}}) = n
Run Code Online (Sandbox Code Playgroud)
这两个签名是参数方法采取的参数{T,n}.
AbstractArray{T,n} - 例如,在您的示例中[1.1 0.3; 0. 0.5](在几个抽象层下面).AbstractArray{T,n}本身.(签名都没有为参数命名,尽管它们显然都接受了一个参数.因为行为只取决于参数的类型签名,不需要名称)
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |