有没有比将其转换为字符串更好的方法来测试char是否为空格?

Nur*_*yev 0 char slice rust

我有一个检查a char是否为空格的函数:

fn is_any_whitespace(ch: &char) -> bool {
    let re = Regex::new(r"\s").unwrap();
    let slice = &ch.to_string()[..];
    re.is_match(slice)
}
Run Code Online (Sandbox Code Playgroud)

让我困扰的是,我转换部分char&str&str是参数的类型is_match接受):

&ch.to_string()[..]
Run Code Online (Sandbox Code Playgroud)

能否更优雅,更有效地完成?

SCa*_*lla 7

您可以使用代替使用正则表达式解决此问题char::is_whitespace。它应该具有相同的行为,并且可能会更有效,具体取决于编译器的优化。无论如何,不​​取决于regex板条箱是一种收益。

唯一真正的区别是char::is_whitespace需要self而不是&self。如果您担心这一点,请不要。自从实现以来,使用&charover char就没有任何收益。实际上,由于s是4个字节,因此直接传递字符通常比8个字节的指针有效。而且这甚至都没有考虑到额外的间接层。charCopychar

如果您坚持使用现有方法,则可以简化为

use regex::Regex;

fn is_any_whitespace(ch: &char) -> bool {
    let re = Regex::new(r"\s").unwrap();
    re.is_match(&ch.to_string())
}
Run Code Online (Sandbox Code Playgroud)

(操场)