Julia 什么';将向量{T}(T<;:A)转换为向量{A}的最快方法是什么?

Julia 什么';将向量{T}(T<;:A)转换为向量{A}的最快方法是什么?,julia,Julia,假设A是一个抽象类型,我有一个函数f{T如果可能的话,我会将您的第二个函数定义更改为参数化的,如f。在方法签名中强制使用这种容器结构是一个很大的性能缺陷,它不会为您带来任何功能……而且只会使它们更难使用 这就是说,最好的转换方法是使用convert(Vector{A},x)进行这种转换,如果x已经是isaVector{A},那么这将是不可行的,否则它将与collect一样 原因如下:如果A!==B,则Vector{A}和Vector{B}类型的两个容器不能共享相同的内存,因为通过Vector{A

假设
A
是一个抽象类型,我有一个函数
f{T如果可能的话,我会将您的第二个函数定义更改为参数化的,如
f
。在方法签名中强制使用这种容器结构是一个很大的性能缺陷,它不会为您带来任何功能……而且只会使它们更难使用

这就是说,最好的转换方法是使用
convert(Vector{A},x)
进行这种转换,如果
x
已经是isa
Vector{A}
,那么这将是不可行的,否则它将与
collect
一样


原因如下:如果
A!==B
,则
Vector{A}
Vector{B}
类型的两个容器不能共享相同的内存,因为通过
Vector{A}将非
B
元素分配给数组可能会损坏
Vector{B}
中的数据

如果可能的话,我会将您的第二个函数定义更改为参数化的,就像
f
一样。在方法签名中强制使用这种容器结构是一个很大的性能缺陷,它不会为您带来任何功能……而且只会使它们更难使用

这就是说,最好的转换方法是使用
convert(Vector{A},x)
进行这种转换,如果
x
已经是isa
Vector{A}
,那么这将是不可行的,否则它将与
collect
一样


原因如下:如果
A!==B
,则
Vector{A}
Vector{B}
类型的两个容器不能共享相同的内存,因为通过
Vector{A}将非
B
元素分配给数组可能会损坏
Vector{B}
中的数据

我原以为只有位类型才能有效地打包到一个数组中。或者至少
不可变的
字段都是位类型。你说得对;我的语言不够精确。我只是删除了这一部分原理-操作的不安全性是不支持此操作的充分理由。我知道我认为只有位类型才能有效地打包到一个数组中。或者至少是
不可变的
,字段都是位类型。你是对的;我的语言不够精确。我只是删除了这一部分理由——操作的不安全性是不支持这一点的充分理由。