Когда я компилирую следующий фрагмент кода:
struct Packet([u8; 4]);
impl Packet {
const fn from(labels: [&[u8; 2]; 2]) -> Packet {
let mut bytes = [0; 4];
bytes[..2].copy_from_slice(labels[0]);
bytes[2..].copy_from_slice(labels[1]);
Packet(bytes)
}
}
const AA: &[u8; 2] = b"AA";
const BB: &[u8; 2] = b"BB";
const CC: &[u8; 2] = b"CC";
const AABB: Packet = Packet::from([AA, BB]);
const AACC: Packet = Packet::from([AA, CC]);
Я получаю следующую ошибку компилятора:
error[E0723]: mutable references in const fn are unstable
--> src/main.rs:7:9
|
7 | bytes[..2].copy_from_slice(labels[0]);
| ^^^^^^^^^^
|
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable
Ошибка очевидна: изменяемые ссылки в const fn еще не являются частью стабильной версии Rust. Но, может быть, есть способ добиться этого в стабильной версии Rust без использования изменяемых ссылок?
Я знаю, что мог бы сделать это вместо этого:
const AABB: Packet = Packet(*b"AABB");
const AACC: Packet = Packet(*b"AACC");
Но в данном случае я не использую константу AA повторно, чего я и пытаюсь добиться.
Спасибо за любую помощь в этом вопросе!