Types f(x::Real)和f{T<;:Real}(x::T)之间的区别?

Types f(x::Real)和f{T<;:Real}(x::T)之间的区别?,types,julia,Types,Julia,用f(x::Real)和f{Tpreferencef(x::Real)定义函数之间有什么区别吗?额外的不必要的类型参数会使编译器的工作更困难,动态调度的工作更慢,更不用说其他人更难阅读了 见: 不要使用不必要的静态参数 函数签名: foo{T<:Real}(x::T) = ... 相反,尤其是在函数体中未使用T的情况下。即使使用了T,如果方便的话,也可以将其替换为typeof(x)。没有性能差异。请注意,这不是针对静态参数的一般警告,只是针对不需要静态参数的使用 还请注意,容器类型,特别

f(x::Real)
f{Tpreference
f(x::Real)
定义函数之间有什么区别吗?额外的不必要的类型参数会使编译器的工作更困难,动态调度的工作更慢,更不用说其他人更难阅读了

见:

不要使用不必要的静态参数 函数签名:

foo{T<:Real}(x::T) = ...
相反,尤其是在函数体中未使用T的情况下。即使使用了T,如果方便的话,也可以将其替换为typeof(x)。没有性能差异。请注意,这不是针对静态参数的一般警告,只是针对不需要静态参数的使用

还请注意,容器类型,特别是在函数调用中可能需要类型参数。有关详细信息,请参阅FAQ避免使用抽象容器的字段

参数化类型
T
实际上并不用于表示类型之间的任何关系,因此使用它几乎没有理由,这只会增加不必要的复杂性

下面是一个示例,其中需要使用参数化类型:

function pow{T <: Real}(base::T, exponent::T)
    base^power
end

现在,这个函数要求
base
exponent
都是
Real
的子类型,但是没有类型关系强制它们都是
Real
的相同子类型,嘿,
foo{x::T,y::T}(x::T,y::T)
vs
foo(x::T,y::T)其中{x::T,y::T}
。首选的样式是什么?是
foo{x::T,y::T}(x::T,y::T)
在0.6中被弃用?你的意思是
foo{T}(x::T,y::T)
?如果你有0.6,则首选
foo(x::T,y::T)其中{T}
foo(x::Real) = ...
function pow{T <: Real}(base::T, exponent::T)
    base^power
end
function pow(base:: Real, exponent:: Real)
    base^power
end