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{Tpreferencef(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)
vsfoo(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