gpt4 book ai didi

rust - 专注于在 Rust 中重用

转载 作者:行者123 更新时间:2023-11-29 08:34:42 25 4
gpt4 key购买 nike

我有一个分词器父类(super class),它可以对任意字符串 _string 进行分词。我想实现一些“简单”的分词器,它们可以对常见的分隔符(如空格、换行符等)进行分词。

我有以下代码:

api.rs

pub struct StringTokenizer { _string: &'static str }

我要实现的第一个子类是一个空间分词器,所以 _string 将是 ""

我尝试以下:

simple.rs

use api::StringTokenizer;

impl StringTokenizer for SpaceTokenizer {
let _string = " ";
}

出现以下错误:

error: expected one of const, extern, fn, pub, type, unsafe, or }, found let

如何在 StringTokenizer 的子类中为 _string 赋予 "" 的值?

最佳答案

Rust 中没有“父类(super class)”和“子类”(从 1.4.0 开始)。我们拥有的最好的是特质。

对于您的情况,我看到两个选项。如果分词器“类”之间的唯一区别是定界符字符串,那么我将有一个结构,并为每个可能的定界符简单地提供各种构造方法:

struct StringTokenizer {
string: &'static str,
}

impl StringTokenizer {
fn new_space() -> StringTokenizer {
StringTokenizer { string: " " }
}
}

如果类需要能够实现不同的行为,那么您应该改用特征。您将使用返回用于每个特定实现的定界符字符串的方法来定义特征。然后,您可以根据需要添加其他方法。

trait StringTokenizer {
fn delimiter() -> &'static str;
}

struct SpaceTokenizer;

impl StringTokenizer for SpaceTokenizer {
fn delimiter() -> &'static str {
" "
}
}

注意,这里的delimiter方法没有self&self或者&mut self参数,这使得它一种“静态”方法。对于其他方法,您可能需要添加其中一个作为第一个参数。

要了解有关特征的更多信息,请阅读 the section on Traits in The Rust Programming Language .

关于rust - 专注于在 Rust 中重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33857673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com