访问原始 Rust 类型的方法

Posted

技术标签:

【中文标题】访问原始 Rust 类型的方法【英文标题】:Access the methods of primitive Rust types 【发布时间】:2021-04-30 11:54:11 【问题描述】:

如何在 Rust 中访问原始类型的方法?

具体来说,我想将split_first_mutsplit_last_mut 两种切片方法之一传递给对切片进行操作的函数。我知道您可以将它们包装在闭包中作为一种解决方法,但我想知道是否可以直接访问。

【问题讨论】:

【参考方案1】:

您可以像常规类型一样访问基元上的方法:

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_mutsplit_last_mut

fn main() 
    do_thing(<[_]>::split_first_mut);
    do_thing(<[_]>::split_last_mut);

【讨论】:

【参考方案2】:

您必须使用完全限定的语法来引用该方法。简而言之:&lt;T&gt;::method_name 其中T 是类型,method_name 是方法的名称。例如,如果您要修改 [i32],那么您需要在方法名称前加上 &lt;[i32]&gt;:: 前缀,如下所示:

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);

playground

【讨论】:

以上是关于访问原始 Rust 类型的方法的主要内容,如果未能解决你的问题,请参考以下文章

Rust极简教程

你如何在 Substrate 特定类型和 Rust 原始类型之间进行转换?

如何在 Rust 中打印变量的类型?

RUST + FLTK:从小部件 on_push() 函数访问另一个小部件

金属Rust:原子操作

Rust中的Copy和Clone