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"
希望对您有所帮助。
我有一个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"
希望对您有所帮助。