Rust 从另一个板条箱在类型上实现std::convert::From
我有一个外部Rust 从另一个板条箱在类型上实现std::convert::From,rust,Rust,我有一个外部geometry板条箱,它定义了一个由浮点数组成的矩形结构,还有一个外部sdl2板条箱,它定义了一个由整数组成的矩形结构 下面的代码是如何使用std::convert::From特性将geometry::Rect转换为sdl2::SdlRect: extern crate geometry; extern crate sdl2; fn main() { let geo_rect = geometry::Rect::default(); let sdl_rect =
geometry
板条箱,它定义了一个由浮点数组成的矩形结构,还有一个外部sdl2
板条箱,它定义了一个由整数组成的矩形结构
下面的代码是如何使用std::convert::From
特性将geometry::Rect
转换为sdl2::SdlRect
:
extern crate geometry;
extern crate sdl2;
fn main() {
let geo_rect = geometry::Rect::default();
let sdl_rect = sdl2::SdlRect::from(geo_rect);
}
impl From<geometry::Rect> for sdl2::SdlRect {
fn from (rect: geometry::Rect) -> sdl2::SdlRect {
sdl2::SdlRect {
x: rect.x as i32,
y: rect.y as i32,
w: rect.w as i32,
h: rect.h as i32,
}
}
}
extern crate geometry;
extern crate sdl2;
fn main() {
let geo_rect = geometry::Rect::default();
let sdl_rect = sdl2::SdlRect::my_from(geo_rect);
}
pub trait MyFrom<T> {
fn my_from(T) -> Self;
}
impl MyFrom<geometry::Rect> for sdl2::SdlRect {
fn my_from (rect: geometry::Rect) -> sdl2::SdlRect {
sdl2::SdlRect {
x: rect.x as i32,
y: rect.y as i32,
w: rect.w as i32,
h: rect.h as i32,
}
}
}
我对这个解决方案不是特别满意,因为知道什么时候从而不是从调用
my_会让人感到困惑。是否有其他方法可以使用更惯用的Rust解决此问题?最好定义自己的矩形类型,该类型封装外部定义的矩形,并使用标准的From
trait
这是该模式的一种可能用途。在当前的情况下,新类型模式似乎还没有完成——虽然有一些板条箱试图绕过其限制,但就目前而言,尝试和实现起来很麻烦,代码也没有变得更简单。我最后做的是将my_从
方法更改为从_sdl
。从_sdl
命名方法与标准库的CStr::from _bytes
方法一致。