【问题标题】:Weird syntax error 'error: expected one of `,` or `:`, found `else`' [closed]奇怪的语法错误'错误:预期是`,`或`:`之一,发现`else`'[关闭]
【发布时间】:2020-04-06 00:47:25
【问题描述】:

目前我正在开发一个用 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 似乎完全对齐。还有其他人遇到这个吗?这是编译器错误吗?

【问题讨论】:

    标签: syntax compiler-errors rust rust-cargo


    【解决方案1】:

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

    一个最小的例子:

    fn main() {
        let adjust = true;
        let al = 0xFF;
    
        /* does not parse:
        if (al & 0x0F) > 9 | | adjust {
        }
        */
    
        if (al & 0x0F) > 9 || adjust {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 2012-08-02
      相关资源
      最近更新 更多