相关疑难解决方法(0)

当enum变量已知时展开内部类型

我有这个枚举类型:

enum Animal {
    Dog(i32),
    Cat(u8),
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个将此类型作为参数的函数.我知道(出于某种原因)输入总是一个Cat.我想实现这个目标:

fn count_legs_of_cat(animal: Animal) -> u8 {
    if let Animal::Cat(c) = animal { c } else { unreachable!() }
}
Run Code Online (Sandbox Code Playgroud)

我可以写这个更短和/或更惯用的吗?

enums rust

12
推荐指数
3
解决办法
4396
查看次数

匹配枚举时无法移出借来的内容

我正在尝试打印出一棵树(它LinkedList现在是正确的,但这将是固定的):

use std::io;
use std::rc::Rc;

enum NodeKind {
    Branch(Rc<Node>),
    Leaf,
}

struct Node {
    value: i32,
    kind: NodeKind,
}

fn main() {
    let leaf = Node { value: 10, kind: NodeKind::Leaf };
    let branch = Node { value: 50, kind: NodeKind::Branch(Rc::new(leaf)) };
    let root = Node { value: 100, kind: NodeKind::Branch(Rc::new(branch)) };

    let mut current = root;
    while true {
        println!("{}", current.value);
        match current.kind {
            NodeKind::Branch(next) => {
                current = *next;
            }
            NodeKind::Leaf => {
                break;
            }
        } …
Run Code Online (Sandbox Code Playgroud)

enums rust

6
推荐指数
1
解决办法
2647
查看次数

无法移出结构的借用内容

我正在尝试为来自另一个程序的BERT数据实现解串器.对于以下代码:

use std::io::{self, Read};

#[derive(Clone, Copy)]
pub struct Deserializer<R: Read> {
    reader: R,
    header: Option<u8>,
}

impl<R: Read> Read for Deserializer<R> {
    #[inline]
    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
        self.reader.read(buf)
    }
}

impl<R: Read> Deserializer<R> {
    /// Creates the BERT parser from an `std::io::Read`.
    #[inline]
    pub fn new(reader: R) -> Deserializer<R> {
        Deserializer {
            reader: reader,
            header: None,
        }
    }

    #[inline]
    pub fn read_string(&mut self, len: usize) -> io::Result<String> {
        let mut string_buffer = String::with_capacity(len);
        self.reader.take(len as …
Run Code Online (Sandbox Code Playgroud)

rust deserialization borrowing

0
推荐指数
1
解决办法
1587
查看次数

标签 统计

rust ×3

enums ×2

borrowing ×1

deserialization ×1