1
私は外部のgeometry
のfloatで構成された矩形の構造体を定義し、外部のsdl2
の整数からなる矩形の構造体を定義しています。私が実装してるの形質または構造体のいずれかがそれだからstd :: convert :: fromを別のクレートの型で実装します
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,
}
}
}
は残念ながら、これはコンパイルされません:
次のコードは、私がstd::convert::From
形質を使用してgeometry::Rect
sdl2::SdlRect
に変換するために期待する方法です現在の木箱から来なければなりません。 my_from
代わりのfrom
を呼び出すようにするとき意志
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,
}
}
}
知っているので、私は、このソリューションには特に満足していない:作品私が見つけた唯一の解決策は、std::convert::From
形質の機能を反映MyFrom
形質を定義することですラインを混乱させる。よりイディオム的な錆を使ってこれを解決する別の方法がありますか?
newtypeパターンは現行のRustでは未完成のようですが、限界を乗り越えようとするいくつかの箱がありますが、試行錯誤してコードを単純化していませんでした。私がやったことは、 'my_from'メソッドを' from_sdl'に変更することでした。 'from_sdl'メソッドの命名は、標準ライブラリの' CStr :: from_bytes'メソッドと同じです。 – Brian