我有CR
和LF
比较的以下代码段。它编译并运行,但它似乎是一个奇怪的语法使用。我想知道是否有更自然的方式进行比较,而不会同时左右两侧。
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;
}
答案 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]
,则不需要&
。)