簡體   English   中英

OCaml類型gtk +類型​​錯誤視圖

[英]OCaml type gtk+ type error view

在錯誤的下方,您會看到類型

?start:GText.iter->?stop:GText.iter->?slice:bool->?visible:bool-> unit-> string

是不是與字符串相同的類型? 因為該函數返回一個字符串,並且傳遞給它的函數需要一個字符串。 我認為最后一個->之后的最后一個類型是返回值的類型。 我錯了嗎?

ocamlfind ocamlc -g -package lablgtk2 -linkpkg calculator.ml -o calculator
File "calculator.ml", line 10, characters 2-44:
Warning 10: this expression should have type unit.
File "calculator.ml", line 20, characters 2-54:
Warning 10: this expression should have type unit.
File "calculator.ml", line 29, characters 61-86:
Error: This expression has type
         ?start:GText.iter ->
         ?stop:GText.iter -> ?slice:bool -> ?visible:bool -> unit -> string
       but an expression was expected of type string

Compilation exited abnormally with code 2 at Sun Aug  2 15:36:27

嘗試致電后

(* Button *)
  let button = GButton.button ~label:"Add"
                              ~packing:vbox#add () in
  button#connect#clicked ~callback: (fun () -> prerr_endline textinput#buffer#get_text ());

它說它是string類型-> unit並提示我缺少一個;

這些編譯器錯誤令人困惑。

編輯:顯然調用它像button#connect#clicked〜callback:(fun()-> prerr_endline(textinput#buffer#get_text())); 是正確的,我需要在函數周圍加上(...),以使prerr知道textinput ...()是一個以()作為arg的函數,而不是將2個參數傳遞給prerr。

這很有趣。 謝謝您的幫助。

這種類型:

?start:GText.iter->?stop:GText.iter->?slice:bool->?visible:bool-> unit-> string

是一個返回字符串的函數。 它與字符串不同。

如類型所示,如果傳遞()作為參數,則可以獲得字符串。 還有4個可選參數。

當一個函數包含可選參數時,它必須至少包含一個非可選參數。 否則,不可能區分部分應用程序和實際應用程序,即函數調用。 如果所有參數都是可選的,則按照約定,將類型為unit的必需參數添加到末尾。 因此,您的函數實際上“等待”,直到您提供()為止:“所有操作都完成了,對其他所有操作都使用默認值”。

TL; DR; 將add ()添加到函數調用的末尾,顯示錯誤。

 ?start:GText.iter -> ?stop:GText.iter -> ?slice:bool -> ?visible:bool -> unit -> string
                                                                          ^^^^
                                                                    required argument
                                                                       of type unit

更新

新的問題是,您忘記了用括號將其定界:

prerr_endline (textinput#buffer#get_text ())

否則,當您向prerr_endline提供3個參數時,編譯器會查看它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM