2016-01-22 138 views
4

我遇到了以下列方式fork fork失败的问题,因为子进程返回Core_kernel.Std.never_returns,并且父级正试图返回()OCaml Core_unix.fork与Core_unix.exec永远不会返回

我收到错误This expression has type unit but an expression was expected of type Core_kernel.Std.never_returns = Core_kernel.Nothing0.t。似乎无法找到与Core.Std这样做的propper方式。

open Core.Std 
open Unix 

let() = 
    let prog = "ls" in 
    let args = ["ls"; "-l"] in 
    match Unix.fork() with 
    | `In_the_child -> 
    Unix.exec ~prog:prog ~args:args(); 
    | `In_the_parent _ -> 
    (* continue on with the program *) 

回答

3

never_returns类型是专门设计成与never_returns功能被消耗。这是要求程序员在代码中清楚地陈述,他明白表达式不会终止。这是一个工作示例:

let() = 
    let prog = "ls" in 
    let args = ["ls"; "-l"] in 
    match Unix.fork() with 
    | `In_the_child -> 
    Unix.exec ~prog ~args() |> 
    never_returns 
    | `In_the_parent _ ->() 
相关问题