[英]Function with no arguments but with type in Julia
我最近浏览了一些Julia的源代码,发现一些函数对我来说似乎很神秘。
在Julia源代码中定义了一些函数,它们没有参数但是有类型注释。
例如: abstractarray.jl中的第20行
我尝试了ndims
函数,
似乎ndims
可以将类型本身作为参数并返回正确的值:
julia> ndims(AbstractArray{Float64, 2})
2
julia> ndims([1.1 0.3; 0. 0.5])
2
有人可以向我解释一下(::DataType)
如何在方法中起作用? 或者朱莉娅的意思是什么?
在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
abstractarray.jl
中的当前实现如下:
ndims{T,n}(::AbstractArray{T,n}) = n
ndims{T,n}(::Type{AbstractArray{T,n}}) = n
两个签名都是采用参数{T,n}
参数方法 。
AbstractArray{T,n}
类型的实例 - 例如,在您的示例中, [1.1 0.3; 0. 0.5]
[1.1 0.3; 0. 0.5]
(低于几层抽象)。 AbstractArray{T,n}
类型 AbstractArray{T,n}
本身。 (两个签名都没有命名参数,虽然它们显然都接受一个参数。因为行为只取决于参数的类型签名,不需要名称)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.