Return 一个字符串而不是单位

Return a string instead of unit

我有一个class方法

  method return__string_sCorona =

    let est_vide chaine_de_car = List.exists ((=) "") strg in 
    let print_data name value = match nom  with 
      | [] -> ()
      | _ -> if not (is_empty name) then print_string value else () in

    begin
      print_data [self#get_province_state("Province or state: " ^ self#get_province_state ^ "\n");
      print_data [self#get_country_region] ("Country or region: " ^ self#get_country_region ^ "\n");
      print_data [self#get_last_update] ("Last Update: " ^ self#get_last_update ^ "\n");
      print_string("Lat et Long: " ^ string_of_float self#get_lat ^ " " ^ string_of_float self#get_long ^ "\n");
      print_string("Confirmed cases: " ^ string_of_int self#get_confirmed_cases ^ "\n");
      print_string("Death cases: " ^ string_of_int self#get_death_cases ^ "\n");
      print_string("Reestablished cases : " ^ string_of_int self#get_reestablished_cases ^ "\n");
      print_string("Active cases: " ^ string_of_int self#get_active_cases ^ "\n\n");
    end

这将打印有关 Covid-19 的不同信息。

实际上,该方法具有类型单元,但由于某些原因,我需要它 return 一个字符串。

我如何 return 字符串并使用 print_string (my_object#return_string_sCorona) 打印结果,而不是只调用 my_object#return_string_sCorona?这很重要,因为我必须在使用 labltk.

的界面中使用它

将此添加到方法的开头

let buf = Buffer.create 512 in
. . .

将所有调用 print_string s 更改为 Buffer.add_string buf s

方法的结尾如下所示:

. . .
Buffer.add_string buf 
      ("Active cases: " ^ string_of_int self#get_active_cases ^ "\n\n");
Buffer.contents buf
end

更新

下面是一个使用缓冲区来累积结果的示例函数。您应该能够毫不费力地以这种方式重写您的方法。

let show_intset x =
    let buf = Buffer.create 128 in
    let rec loop x n =
        if x <> 0 then
            begin
            if x mod 2 = 1 then
                begin
                if Buffer.contents buf <> "" then
                    Buffer.add_string buf ", ";
                Buffer.add_string buf (string_of_int n)
                end;
            loop (x / 2) (n + 1)
            end
    in
    loop x 0;
    Buffer.contents buf

下面是你 运行 顶层函数的样子:

# #use "p.ml";;
val show_intset : int -> string = <fun>
# show_intset 12;;
- : string = "2, 3"
# show_intset 1023;;
- : string = "0, 1, 2, 3, 4, 5, 6, 7, 8, 9"
# show_intset 1024;;
- : string = "10"

希望对您有所帮助。