我试图通过阅读 release notes 来理解 Julia v0.6 中的新类型系统。 .
谁能告诉我什么
inv(M::Matrix{T}) where T <: AbstractFloat
给了我不同于使用经典的
inv{T<:AbstractFloat}(M::Matrix{T})
?
最佳答案
新语法意味着同样的事情,但可以在更多情况下使用,可以表达更多构造并消除许多概念上的歧义,尤其是围绕参数构造函数。旧语法将在 0.6 中弃用,一些旧语法将在 1.0 中以不同的含义回收。从根本上说,F{T}(args...)
的问题是F{T}
部分在概念上是模棱两可的——解析器知道它的意思,但它经常让人类感到困惑:
F{T}
表示参数类型 F
带类型参数 T
. F{T}(args...)
表示应用类型 F{T}
到参数 args...
作为函数,通常构造类型 F{T}
的实例. F{T}(args...) = expr
,表示为F
定义一个方法作为函数,带有类型参数 T
形式论证args...
和定义 expr
. 特别是,这些都没有语法:
F{T}
添加方法T
的具体值在当前范围内。 F{T}
添加方法对于每个参数值 T
. 这种情况导致 Julia 0.5 和之前的构造函数语法比必要的更加困惑和不直观。在 Julia 1.0 中,类型参数和构造函数将更加直观和一致,遵循以下原则:
F{T}
语法总是指类型 F
带参数 T
. where
引入条款。 当 0.6 发布时,将会有更详细的更改说明,可能在一篇关于 0.6 版本亮点的博客文章中。
关于julia - julia-0.6 中的函数定义中的 `where`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931289/