3

私は非常に単純な問題を抱えていると思いますが、何が問題なのかを理解する方法はありません。ファイルを開き、ファイルが存在しない場合やその他の場合にカスタム メッセージで失敗しようとします。

ここに私のコード(フランス語のコメントで申し訳ありません):

if (argc = 1) then
    aide ()
else
    (* Si plus d'un argument, on récupère le type *)
    if argc >= 2 then
        let stage = int_of_string (Sys.argv.(1)) in
            if stage != 0 && stage != 1 then
                aide ()
            else
                ()
    else
        ()
    ;    
    (* Si plus de deux arguments, on récupère aussi l'entrée *)
    if argc >= 3 then
        let filename = Sys.argv.(2) in
        let input =
        try
            open_in filename
        with _ -> failwith ("Impossible d'ouvrir le fichier " ^ filename)
    else
        ()
    ;
;;

with キーワードに構文エラーがあります。誰かがアイデアを持っていますか?ありがとう。

4

2 に答える 2

4

値にバインドしたが、ブランチinputで何も返さなかったため、エラーが発生しました。then

値で何かをして、ブロック の後にinput戻る必要があります。()try/with

if argc >= 3 then
    let filename = Sys.argv.(2) in
    let input = (* The error is in this line *)
    try
        open_in filename
    with _ -> failwith ("Impossible d'ouvrir le fichier " ^ filename)
else
    ()
于 2012-05-04T11:42:25.500 に答える
0

あなたの問題は、コードが何もしないことです。値 «input» を定義しますが、それを使用しません。Ocaml は何もしないコードを好みません。次のように書く必要があります。

if (argc = 1) then
    aide ()
else begin
    (* Si plus d'un argument, on récupère le type *)
    if argc >= 2 then
        let stage = int_of_string (Sys.argv.(1)) in
            if stage != 0 && stage != 1 then
                aide ()
            else
                ()
    else
        ()
    ;    
    (* Si plus de deux arguments, on récupère aussi l'entrée *)
    if argc >= 3 then
        let filename = Sys.argv.(2) in
        let input =
        try
            open_in filename
        with _ -> failwith ("Impossible d'ouvrir le fichier " ^ filename)
        in
        (* Le code principal du programme qui utilise la valeur input *)
    else
        ()
    ;
end;;

コードに関するその他の注意事項:

  1. «failwith ("Impossible d'ouvrir le fichier " ^ filename)» は使用したくないと思います。キャッチされない例外が発生するからです。あなたはすでにそれをキャッチしたので、エラーメッセージを出力して終了します:

    (print_endline ("Impossible d'ouvrir le fichier " ^ filename); exit 1)
    
  2. «begin» と «end» を使用する必要があります

于 2012-05-04T13:02:30.970 に答える