gpt4 book ai didi

ocaml - scanf 不接受第一个参数

转载 作者:行者123 更新时间:2023-12-02 00:05:26 28 4
gpt4 key购买 nike

以下代码运行没有错误:

let f x y =
print_int (max x y);
print_char ' ';
print_int (x + y) in
for i = 1 to Scanf.scanf "%d" (fun x -> x) do
Scanf.scanf "\n%d %d" f;
print_newline ();
done;

但是当我声明一个变量 fmt 来保存格式“\n%d %d”并将其传递给 scanf 时,我收到错误,这是新代码:

let f x y =
print_int (max x y);
print_char ' ';
print_int (x + y) in
let fmt = "\n%d %d" in (* added *)
for i = 1 to Scanf.scanf "%d" (fun x -> x) do
Scanf.scanf fmt f; (* edited *)
print_newline ();
done;

我收到此错误:

  File "prog.ml", line 7, characters 16-19:
Error: This expression has type string but an expression was expected of type
('a, Scanf.Scanning.in_channel, 'b, 'c -> 'd, 'a -> 'e, 'e) format6

为什么它的工作方式不同?这两个代码之间有什么区别吗?

最佳答案

OCaml 中 printf/scanf 格式的处理使用了一些编译器魔法,将字符串常量视为适当上下文中的格式。问题是您不再有字符串常量。

您可以使用 format_of_string 函数将字符串常量预先转换为格式。

let fmt = 行更改为:

let fmt = format_of_string "\n%d %d" in

这使您的代码适合我。

关于ocaml - scanf 不接受第一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864874/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com