Weird syntax error 'error: expected one of `,` or `:`, found `else`'

Weird syntax error 'error: expected one of `,` or `:`, found `else`'

目前我正在使用 Rust 编写的 VM。有两个语法错误我 运行 我正在努力解决这两个错误,因为它们对我来说似乎不太有意义。

代码如下:

pub fn aaa(vm: &mut VM, pipeline: &Pipeline, _hv: &mut dyn Hypervisor) -> Result<(), VMError>{
    let mut al = vm.get_reg(Reg8::AL as u8, ValueSize::Byte)?.u8_exact()?;
    let ah = vm.get_reg(Reg8::AH as u8, ValueSize::Byte)?.u8_exact()?;
    let adjust = vm.flags.adjust;
    if (al & 0x0F) > 9 | | adjust {
        vm.set_reg(Reg8::AL as u8, SizedValue::Byte(al1.overflowing_add(6)));
        vm.set_reg(Reg8::AH as u8, SizedValue::Byte(ah.overflowing_add(1)));
        vm.flags.adjust = true;
        vm.flags.carry = true;
    } else {
        vm.flags.adjust = false;
        vm.flags.carry = false;
    }
    al = vm.get_reg(Reg8::AL as u8, ValueSize::Byte)?.u8_exact()?;
    vm.set_reg(Reg8::AL as u8, SizedValue::Byte(al2 & 0x0F));
    Ok(())
}

我得到的错误在这里:

error: expected `,`
   --> src/ops.rs:738:9
    |
738 |         vm.set_reg(Reg8::AL as u8, SizedValue::Byte(al1.overflowing_add(6)));
    |         ^^

   --> src/ops.rs:738:9
    |
738 |         vm.set_reg(Reg8::AL as u8, SizedValue::Byte(al1.overflowing_add(6)));
    |         ^^

error: expected one of `,` or `:`, found `else`
   --> src/ops.rs:742:7
    |
742 |     } else {
    |       ^^^^ expected one of `,` or `:` here

我只是想访问结构字段实现的函数,我不确定为什么编译器会告诉我使用逗号而不是句号。此外,我不知道为什么它需要逗号或冒号而不是我的 else 语句。 if else 似乎完全对齐。还有其他人 运行 参与其中吗?这是编译器错误吗?

您的问题是 if 条件中的 | |。这不是解析为逻辑或 (||),而是解析为两个单独的按位或运算符 (|)。只需将其更改为 ||,中间没有 space。

一个最小的例子:

fn main() {
    let adjust = true;
    let al = 0xFF;

    /* does not parse:
    if (al & 0x0F) > 9 | | adjust {
    }
    */

    if (al & 0x0F) > 9 || adjust {
    }
}