`其中`在julia-0.6中的函数定义中
我试图在阅读的基础上理解Julia v0.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}部分在概念上是不明确的–解析器知道它的意思,但它常常让人困惑:
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})