基本上我正在尝试制作一个表明能够转换为 2D ndarray
aka的特征ndarray::Array2
:
trait Into2DArray{
fn to_array(&self) -> Array2<f64>;
}
我想通过扩展现有AsArray
特征来做到这一点,但是出于某种深奥的原因,Rust 禁止我为第三方 struct () 实现第三方特征polars::DataFrame
,因此我必须为此创建自己的特征。
无论如何,这适用于polars::DataFrame
:
impl Into2DArray for DataFrame {
fn to_array(&self) -> Array2<f64> {
return self.to_array();
}
}
但是,我也想为任何已经可以转换为二维数组的东西实现这个,所以我为AsArray
上面提到的 trait 实现了这个 trait:
impl Into2DArray for AsArray<'_, f64, Ix2> {
fn to_array(&self) -> Array2<f64> {
return self.into();
}
}
然而,编译器让我为此感到悲痛:
|
26 | impl Into2DArray for AsArray<'_, f64, Ix2> {
| ^^^^^^^^^^^^^^^^^^^^^ `AsArray` cannot be made into an object
|
= note: the trait cannot be made into an object because it requires `Self: Sized`
= note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
我知道这与对象安全有关,但我认为我已经满足了该页面上提到的所有标准,即 trait doesn't return Self
,并且AsArray
指定了所有通用参数。
出了什么问题,我该如何解决?