访问原始 Rust 类型的方法
Access the methods of primitive Rust types
如何在 Rust 中访问基本类型的方法?
具体来说,我想将 split_first_mut
和 split_last_mut
这两个切片方法中的任何一个传递给对切片进行操作的函数。我知道您可以将它们包装在闭包中作为解决方法,但我想知道是否可以直接访问。
您可以像访问常规类型一样访问基元上的方法:
u8::to_le();
str::from_utf8();
<[_]>::split_first_mut();
您可以创建一个接受切片操作函数的函数:
fn do_thing<T>(f: impl Fn(&mut [u8])) -> Option<(&mut T, &mut [T])>) {
// ...
}
并传入 split_first_mut
和 split_last_mut
:
fn main() {
do_thing(<[_]>::split_first_mut);
do_thing(<[_]>::split_last_mut);
}
您必须使用完全限定的语法来引用该方法。简而言之:<T>::{method_name}
其中 T
是类型,{method_name}
是方法的名称。例如,如果您要修改 [i32]
,那么您需要在方法名称前加上 <[i32]>::
前缀,如下所示:
fn apply_fn<T, U>(t: T, t_fn: fn(T) -> U) -> U {
t_fn(t)
}
fn main() {
let mut items: Vec<i32> = vec![1, 2, 3];
let slice: &mut [i32] = items.as_mut_slice();
let first_split = apply_fn(slice, <[i32]>::split_first_mut);
let slice: &mut [i32] = items.as_mut_slice();
let last_split = apply_fn(slice, <[i32]>::split_last_mut);
}
如何在 Rust 中访问基本类型的方法?
具体来说,我想将 split_first_mut
和 split_last_mut
这两个切片方法中的任何一个传递给对切片进行操作的函数。我知道您可以将它们包装在闭包中作为解决方法,但我想知道是否可以直接访问。
您可以像访问常规类型一样访问基元上的方法:
u8::to_le();
str::from_utf8();
<[_]>::split_first_mut();
您可以创建一个接受切片操作函数的函数:
fn do_thing<T>(f: impl Fn(&mut [u8])) -> Option<(&mut T, &mut [T])>) {
// ...
}
并传入 split_first_mut
和 split_last_mut
:
fn main() {
do_thing(<[_]>::split_first_mut);
do_thing(<[_]>::split_last_mut);
}
您必须使用完全限定的语法来引用该方法。简而言之:<T>::{method_name}
其中 T
是类型,{method_name}
是方法的名称。例如,如果您要修改 [i32]
,那么您需要在方法名称前加上 <[i32]>::
前缀,如下所示:
fn apply_fn<T, U>(t: T, t_fn: fn(T) -> U) -> U {
t_fn(t)
}
fn main() {
let mut items: Vec<i32> = vec![1, 2, 3];
let slice: &mut [i32] = items.as_mut_slice();
let first_split = apply_fn(slice, <[i32]>::split_first_mut);
let slice: &mut [i32] = items.as_mut_slice();
let last_split = apply_fn(slice, <[i32]>::split_last_mut);
}