julia - julia-0.6 中的函数定义中的 `where`

标签 julia

我试图通过阅读 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/

    相关文章:

    optimization - 提高以下计算 softmax 导数的代码性能的技巧

    julia - 线性规划 : Find all optimal vertices

    julia - 何时插入基准表达式

    julia - 如何在 Julia 中重新计算向量的 eltype

    Julia :如何返回数组中唯一元素的数量

    arrays - 在 Julia 中,如何获取排序数组中超过某个值的第一个元素的索引?

    arrays - Julia :类型定义包含可变长度数组

    loops - Julia for 循环中的迭代索引

    shell - Julia 中的多行命令

    function - 如何在满足 if 条件时重新启动函数