繁体   English   中英

这个OCaml代码有什么问题?

[英]What's wrong with this OCaml code?

这段代码出了什么问题?

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关键字相关的Error: Syntax error

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

我认为这是一个小的但没有线索,根据语法规范它应该没问题

分号的优先级低于if-else,所以当你需要在if中有一个由分号分隔的两个或多个语句的块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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM