奇怪的语法错误'错误:可能是`,`或`:`之一,找到的是'else`'

问题描述 投票:0回答:1

目前,我正在使用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

我只是试图访问struct字段实现的函数,我不确定为什么编译器会告诉我使用逗号而不是句点。此外,我不知道为什么要用逗号或冒号代替我的else语句。如果不是,则看起来是完全对齐的。还有其他人遇到吗?这是编译器错误吗?

syntax compiler-errors rust rust-cargo
1个回答
0
投票

您的问题是在if条件下的| |。该解析不是解析为逻辑或(||),而是解析为两个单独的按位或运算符(|)。只需将其更改为||之间就没有空格。

一个最小的例子:

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

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

    if (al & 0x0F) > 9 || adjust {
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.