在生锈连接字节,字符串和比较

时间:2014-11-21 23:03:15

标签: rust

我有CRLF比较的以下代码段。它编译并运行,但它似乎是一个奇怪的语法使用。我想知道是否有更自然的方式进行比较,而不会同时左右两侧。

pub const CR: u8 = b'\r';
pub const LF: u8 = b'\n';
pub const CRLF: [u8, ..2] = [CR,LF]; // this probably should have a different type?

let mut cur_line: String;
// *snip getting line value*

// casting both the left and right hand side, is there a better way?
if cur_line.as_bytes() == &CRLF {
    break;
}

1 个答案:

答案 0 :(得分:2)

我会使用&'static [u8]

pub const CRLF: &'static [u8] = b"\r\n";  // or &[CR, LF]

我还会说你应该小心你正在使用的线型; cur_line保证是UTF-8吗?如果不是,则应为Vec<u8>而不是String,而CRLF可能应为&'static str"\r\n"。但无论如何,比较cur_line.as_bytes() == CRLF很好。 (一旦&'static [u8]而不是[u8, ..2],则不需要&。)