`其中`在julia-0.6中的函数定义中

`其中`在julia-0.6中的函数定义中,julia,Julia,我试图在阅读的基础上理解Julia v0.6中的新型系统 谁能告诉我什么 inv(M::Matrix{T}) where T <: AbstractFloat inv(M::Matrix{T}),其中T新语法的含义相同,但可用于更多情况,并可表达更多构造,消除了许多概念上的歧义,尤其是围绕参数构造函数的歧义。旧语法将在0.6中被弃用,一些旧语法将在1.0中以不同的含义被回收。从根本上说,F{T}(args…的问题在于F{T}部分在概念上是不明确的–解析器知道它的意思,但它常常让人困惑:

我试图在阅读的基础上理解Julia v0.6中的新型系统

谁能告诉我什么

inv(M::Matrix{T}) where T <: AbstractFloat

inv(M::Matrix{T}),其中T新语法的含义相同,但可用于更多情况,并可表达更多构造,消除了许多概念上的歧义,尤其是围绕参数构造函数的歧义。旧语法将在0.6中被弃用,一些旧语法将在1.0中以不同的含义被回收。从根本上说,
F{T}(args…
的问题在于
F{T}
部分在概念上是不明确的–解析器知道它的意思,但它常常让人困惑:

  • 在隔离状态下,
    F{T}
    表示带有类型参数
    T
    的参数类型
    F

  • 紧跟着parens,而不是作为方法定义的一部分,
    F{T}(args…
    意味着将类型
    F{T}
    作为函数应用于参数
    args…
    ,通常构造类型
    F{T}
    的实例

  • 后面是parens和equals,即作为方法定义的一部分,如
    F{T}(args…=expr
    ,它意味着将
    F
    的方法定义为一个函数,类型参数
    T
    形式参数
    args…
    和定义
    expr

特别是,以下任一项都没有语法:

  • 为当前范围中的
    T
    的具体值向
    F{T}
    添加方法

  • 为每个参数值
    T
    F{T}
    添加方法

这种情况会导致Julia 0.5和更早版本中的构造函数语法变得更加混乱和不直观。在Julia 1.0中,类型参数和构造函数将更加直观和一致,遵循以下原则:

  • 用于定义方法的语法始终与用于调用方法的语法匹配
  • F{T}
    语法总是指带有参数
    T
    的类型
    F
  • 类型参数总是由
    where
    子句引入

当0.6发布后,可能会在一篇关于0.6版本亮点的博客文章中对这些更改进行更详细的解释。

我不知道您的问题的答案,但我很好奇新语法是取代旧语法还是补充语法。非常感谢您的详细回复,这已经非常有用了。如果我理解正确,这意味着旧语法将被更新、更清晰的语法所取代?我认为这看起来是一个非常好的语法变化。我看到了一些例子,比如
f(x::T),其中T=x
浮动。这是推荐的用法吗?对它的可读性或清晰性有什么担心吗?关于该语法的可读性一直存在一些争论,而且还没有定论,所以我们将在最终的0.6版本中看到发生了什么。我可能不得不来编辑这个问题和答案:)直到我读到这篇文章,我也不完全清楚语法为什么会改变,但是有了这个解释,我突然对它很满意!没有博客文章,但这里是这篇文章的更新版本(包括一些关于新语法和功能的讨论):
inv{T<:AbstractFloat}(M::Matrix{T})