[英]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.