我不太清楚julia中花括号的作用和用法,请各位能指点下
比如:
f(x::T, y::T)::T where {T} = x + y
上面是什么意思,x::T是表示x属于T类型或者x是T的一个实例?但{T} = x + y又是什么意思呢?
还有创建数组时:{T}是表示创建的数组元素类型是属于T类型,这个是固定用法吗?
Array{T}(undef, dims…)
希望高手能指点下{}在Julia中的基本用法,谢谢
我不太清楚julia中花括号的作用和用法,请各位能指点下
比如:
f(x::T, y::T)::T where {T} = x + y
上面是什么意思,x::T是表示x属于T类型或者x是T的一个实例?但{T} = x + y又是什么意思呢?
还有创建数组时:{T}是表示创建的数组元素类型是属于T类型,这个是固定用法吗?
Array{T}(undef, dims…)
希望高手能指点下{}在Julia中的基本用法,谢谢
个人感觉这个问题不太好直接回答,但对于从Python等语言转过来的人而言,确实是一个常见的问题。强答一点点,希望后面有人能补充。
首先,确保你理解了官方文档中的 参数类型 部分的内容(这部分内容还没翻译,不妨试着边翻译边理解下?)
这里似乎断句出错了。。。
f(x::T,y::T)::T where {T} = x + y
# 等价于
function f(x::T,y::T)::T where {T}
x+y
end
# 并不存在所谓的
{T} = x + y
是的
help?> ::
search:
::
With the ::-operator type annotations are attached to expressions and variables in programs. See the manual section on Type Declarations.
Outside of declarations :: is used to assert that expressions and variables in programs have a given type.
Examples
≡≡≡≡≡≡≡≡≡≡
julia> (1+2)::AbstractFloat
ERROR: TypeError: typeassert: expected AbstractFloat, got Int64
julia> (1+2)::Int
3
这个,怎么说呢? Array{T}(undef, dims...)
只是(最常见的)构建Array
的一种方法,还有很多其它构造函数:
建议先从文档出发,然后自己动手写一些简单类型实践下,最后再多读读别人的代码学习下惯用法。
非常感谢您的耐心解答!
我再看看文档
julia之路还很漫长
花括号在Julia里用于声明 UnionAll 类型变量。一般配合where关键字使用
对于类型来说,这个相当于类型的静态参数,是可以在编译时期推导出来的,例如
struct Foo{T}
end
或者配合 where 关键字,用于声明多个UinonAll变量(如果只有一个其实不用花括号的)
function f(x::T, y::T) where T
end
function f(x::TA, y::TB) where {TA, TB}
end
实际上这个花括号相当于
where TA where TB
where后面如果不用花括号只能直接跟随一个UnionAll的变量名(可以加上 <: 的限制),但是不能用于声明多个UnionAll。
对于类型的花括号,一般声明了参数类型会自带一种可以输入静态参数的构造函数(constructor),这些函数可以使用花括号来输入静态参数变量。但是这仅仅只适用于类型的构造函数。Array{T}
, Array{T, N}
等等都是这一类构造函数。
谢谢罗博的指导,学习了,再次感谢!