OCaml 语法错误,带有 if-else 块,没有任何信息

问题描述 投票:0回答:1

我是

Ocaml
的新手,我必须做一个项目。我目前面临带有
end
关键字的 if-else 块的问题。这是我有问题的方法。。这是我完整的项目。谢谢您的帮助。

let parkVehicle () =
    try
      print_string "Please enter the license plate: ";
      let licensePlate = read_line () in
      let index = checkExists licensePlate in
        if index = -1 then
          begin
            print_string "Adding new ticket....\n";
            let ticket = Ticket.(setId (Int64.of_float (Unix.time ())));
            if addVehicle licensePlate then
              begin
                tickets := ticket :: !tickets;
                print_string "Parking vehicle successfully....\n"
              end
            else
              print_string "Fail to add new ticket! Try again!\n"
          end
         ^^^^^
        else 
          begin
            print_string "Removing existing ticket....\n";
            let ticket = List.nth !tickets index in
            tickets := List.filter (fun t -> t <> ticket) !tickets;
            if Ticket.removeVehicle ticket then
              begin
                let diff = Ticket.getEndTime ticket -. Ticket.getStartTime ticket in
                let minutes = int_of_float (diff /. 60.0) in
                Vehicle.setTotalParkingTime minutes;
                print_string "Payment ticket information....\n";
                print_string (Ticket.toString ticket ^ "\n")
              end
            else
              begin
                print_string "Fail to remove existing ticket! Try again!\n";
                tickets := ticket :: !tickets
              end
          end
    with _ ->
      print_string "An error occurs!\n"      

请帮我检查并修复这个问题,使项目可以运行。我尝试修复它好几个星期但没有成功。提前谢谢您。

if-statement error-handling syntax-error ocaml
1个回答
0
投票

您的问题实际上并不在于

end
,而是在您的代码的早期部分:

let ticket = Ticket.(setId (Int64.of_float (Unix.time ())));

这不是有效的语法。而是使用

let ... in ...

let ticket = Ticket.(setId (Int64.of_float (Unix.time ()))) in
© www.soinside.com 2019 - 2024. All rights reserved.