"where T" 在 Julia 中没有任何 T 的规定是什么作用?

8

我刚接触Julia,但我并没有找到一份关于where的解释能够让我完全理解。所以我理解,例如:function f(x::T, y::T) where {T<:Number} = true 要求x和y参数都必须是某种数值类型。

然而,还有其他函数看起来像 function f(X::AbstractMatrix{T}) where T 没有指定T应该是什么类型。有人能解释一下这是在做什么,以及我何时需要使用这种语法吗?

2个回答

9

where T没有其他内容,只是在其他的情况下等同于where {T<:Any},换句话说,它对所有的T都成立,但是Julia需要你写一些东西来定义T


明白了,谢谢。那么function f(x::AbstractMatrix)function f(x::AbstractMatrix{T}) where T之间有什么区别呢? - DFL
3
在后一个定义的函数体内,你可以访问到变量 T。就这样。 - mbauman
3
另外一个微小的区别是,对于使用“where T”方法定义的内容,Julia将忽略 "@nospecialize"。 - Bogumił Kamiński

4
奥斯卡的回答是正确的,但是为了回答你的第二个问题,
“我什么时候会想要使用这种语法?”
像mbauman在评论中建议的那样,这种语法的典型用途是当您想要在函数体中使用类型时。也许示例在文档中可以帮助:
julia> mytypeof(x::T) where {T} = T
mytypeof (generic function with 1 method)

julia> mytypeof(1)
Int64

julia> mytypeof(1.0)
Float64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接