3 个版本
0.1.2 | 2018年9月28日 |
---|---|
0.1.1 | 2018年9月14日 |
0.1.0 | 2018年9月14日 |
在 Rust 模式 中排名第 2761
19KB
395 行
定位
此 crate 提供了 IntoPin
特性。 IntoPin
可以用来将任何类型包装在 Pin
中,但在创建强制、固定的引用方面非常强大。
示例
#![feature(pin)]
extern crate pinpoint;
use std::pin::Pin;
use pinpoint::IntoPin;
fn example<'a, P>(item: P)
where
P: IntoPin<&'a mut [u8]>
{
let mut pin: Pin<&mut [u8]> = item.into_pin();
pin.reverse();
}
let mut v = vec![1, 2, 3, 4];
example(&mut v);
assert_eq!(v, [4, 3, 2, 1]);
let mut b: Box<[u8]> = Box::new([4, 3, 2, 1]);
example(&mut b);
assert_eq!(*b, [1, 2, 3, 4]);
lib.rs
:
此 crate 提供了 IntoPin
特性。 IntoPin
可以用来将任何类型包装在 Pin
中,但在创建强制、固定的引用方面非常强大。
示例
#![feature(pin)]
extern crate pinpoint;
use std::pin::Pin;
use pinpoint::IntoPin;
let v = vec![1, 2, 3, 4, 5];
let pinned_slice: Pin<&[u32]> = (&v).into_pin();
使用泛型的示例
#![feature(pin)]
extern crate pinpoint;
use std::pin::Pin;
use pinpoint::IntoPin;
fn example<'a, P>(item: P)
where
P: IntoPin<&'a mut [u8]>
{
let mut pin = item.into_pin();
pin.reverse();
}
let mut v = vec![1, 2, 3, 4];
example(&mut v);
assert_eq!(v, [4, 3, 2, 1]);
let mut b: Box<[u8]> = Box::new([4, 3, 2, 1]);
example(&mut b);
assert_eq!(*b, [1, 2, 3, 4]);
特性
为了使用 IntoPin
特性,应使用此 crate 的特性 pinned
。为了从一个包含切片的 Cell 创建包含 Cell 类型的固定切片,请使用此 crate 的 slice_of_cells
特性。