ocaml - 此OCaml代码有什么问题?

标签 ocaml syntax-error if-statement

此代码有什么问题?

let vm_run vm =
    let guard = ref true in
    while !guard do
        if vm.cur_pc = -1 && not (Stack.empty vm.call_stack) then vm_pop_ar vm
        else if vm.cur_pc = -1 then guard := false
        else if vm.cur_pc < Array.length vm.cur_code then
            execute vm Array.get vm.cur_code vm.cur_pc;
            vm.cur_pc <- vm.cur_pc + 1
        else vm_pop_ar vm
    done

错误是与最后一个Error: Syntax error关键字相关的else

我对OCaml充满信心,但是if/else链仍然给我带来了一些麻烦..这不是第一次(上次我利用flow来避免使用else关键字)。

我认为它很小但是没有任何线索,根据语法规范应该没问题

最佳答案

分号的优先级低于if-else,因此当您需要在if内包含两个或多个由分号分隔的语句的块时,需要将其括在括号或begin...end块中(两者等效):

    else if vm.cur_pc < Array.length vm.cur_code then begin
        execute vm Array.get vm.cur_code vm.cur_pc;
        vm.cur_pc <- vm.cur_pc + 1
    end
    else vm_pop_ar vm

关于ocaml - 此OCaml代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183020/

相关文章:

php - PHP解析/语法错误;以及如何解决它们

mysql - 失败 : create table using hibernate 2

parsing - OCaml 解析函数

regex - 检查字符串是否以 OCaml 中的某些文本结尾的最方便方法?

c - 在 C 中定义导致错误之前的函数声明

javascript - 将你的分数与 jQuery 中的三个范围进行比较的最短方法

ios - If 子句启动异常

language-agnostic - 你如何处理巨大的 if 条件?

performance - 如何针对动态间隔调度优化这些 ocaml 函数?

makefile - 如何通过 OCamlbuild 使用 Menhir 错误消息生成?