专注于在 Rust 中重用
Specialize to reuse in Rust
我有一个分词器超类,可以对任意字符串进行分词 _string
。我想实现一些 "simple" 分词器,它们可以对 space、换行符等常见分隔符进行分词
我有以下代码:
api.rs
pub struct StringTokenizer { _string: &'static str }
我要实现的第一个子类是 space 分词器,因此 _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 中没有 "superclasses" 和 "subclasses"(从 1.4.0 开始)。我们拥有的最好的是特质。
对于你的情况,我看到两个选项。如果 tokenizer "classes" 之间的唯一区别是定界符字符串,那么我将有一个结构,并且为每个可能的定界符简单地提供各种构造函数方法:
struct StringTokenizer {
string: &'static str,
}
impl StringTokenizer {
fn new_space() -> StringTokenizer {
StringTokenizer { string: " " }
}
}
如果 类 需要能够实现不同的行为,那么您应该改用特征。您将使用 returns 用于每个特定实现的分隔符字符串的方法来定义特征。然后您可以根据需要添加其他方法。
trait StringTokenizer {
fn delimiter() -> &'static str;
}
struct SpaceTokenizer;
impl StringTokenizer for SpaceTokenizer {
fn delimiter() -> &'static str {
" "
}
}
请注意,这里的delimiter
方法没有self
、&self
或&mut self
参数,因此它是一个"static"方法。对于其他方法,您可能需要添加其中一个作为第一个参数。
要了解有关特征的更多信息,请阅读 the section on Traits in The Rust Programming Language。
我有一个分词器超类,可以对任意字符串进行分词 _string
。我想实现一些 "simple" 分词器,它们可以对 space、换行符等常见分隔符进行分词
我有以下代码:
api.rs
pub struct StringTokenizer { _string: &'static str }
我要实现的第一个子类是 space 分词器,因此 _string
将是 " "
.
我尝试以下:
simple.rs
use api::StringTokenizer;
impl StringTokenizer for SpaceTokenizer {
let _string = " ";
}
并出现以下错误:
error: expected one of
const
,extern
,fn
,pub
,type
,unsafe
, or}
, foundlet
如何在 StringTokenizer
的子类中给 _string
值 " "
?
Rust 中没有 "superclasses" 和 "subclasses"(从 1.4.0 开始)。我们拥有的最好的是特质。
对于你的情况,我看到两个选项。如果 tokenizer "classes" 之间的唯一区别是定界符字符串,那么我将有一个结构,并且为每个可能的定界符简单地提供各种构造函数方法:
struct StringTokenizer {
string: &'static str,
}
impl StringTokenizer {
fn new_space() -> StringTokenizer {
StringTokenizer { string: " " }
}
}
如果 类 需要能够实现不同的行为,那么您应该改用特征。您将使用 returns 用于每个特定实现的分隔符字符串的方法来定义特征。然后您可以根据需要添加其他方法。
trait StringTokenizer {
fn delimiter() -> &'static str;
}
struct SpaceTokenizer;
impl StringTokenizer for SpaceTokenizer {
fn delimiter() -> &'static str {
" "
}
}
请注意,这里的delimiter
方法没有self
、&self
或&mut self
参数,因此它是一个"static"方法。对于其他方法,您可能需要添加其中一个作为第一个参数。
要了解有关特征的更多信息,请阅读 the section on Traits in The Rust Programming Language。