此代码有什么问题?
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/