繁体   English   中英

函数没有参数但在Julia中有类型

[英]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}本身。

(两个签名都没有命名参数,虽然它们显然都接受一个参数。因为行为只取决于参数的类型签名,不需要名称)

Julia手册的类型方法部分解释了基本思想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM