Syntax 奇怪的语法错误';错误:应为“、”或“:”,找到“else”';

Syntax 奇怪的语法错误';错误:应为“、”或“:”,找到“else”';,syntax,compiler-errors,rust,rust-cargo,Syntax,Compiler Errors,Rust,Rust Cargo,目前我正在开发一个用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_ex

目前我正在开发一个用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(())
}

我只是试图访问struct字段实现的函数,我不知道为什么编译器会告诉我使用逗号而不是句号。此外,我不知道为什么它需要逗号或冒号而不是else语句。if-else似乎完全对齐。还有人碰到这个吗?这是一个编译器错误吗

您的问题是if条件下的
|
。它不是解析为逻辑OR(
|
),而是解析为两个独立的按位OR运算符(
|
)。只需将其更改为
|
,中间无空格即可

一个简单的例子:

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

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

    if (al & 0x0F) > 9 || adjust {
    }
}
fn main() {
    let adjust = true;
    let al = 0xFF;

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

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