Formatting OCaml格式:如何缩进自动换行符
我正在尝试使用OCaml的模块漂亮地打印一些结构。根据,我只需要使用方框,并在适合新行的地方指定断点。然而,我无法获得正确的缩进 例如:Formatting OCaml格式:如何缩进自动换行符,formatting,ocaml,Formatting,Ocaml,我正在尝试使用OCaml的模块漂亮地打印一些结构。根据,我只需要使用方框,并在适合新行的地方指定断点。然而,我无法获得正确的缩进 例如: # open Format;; # fprintf std_formatter "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk@])";; bar = foo( lkjlkjlkj: lkjlkjlkj, lkjlkjlkjlj
# open Format;;
# fprintf std_formatter "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk@])";;
bar = foo(
lkjlkjlkj: lkjlkjlkj,
lkjlkjlkjlj: lkjlkjlkjlkj,
lkjj: lkjlk)
- : unit = ()
如何让它正确缩进参数?我无法复制。我明白了:
# Format.fprintf Format.std_formatter "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk,@ aze: azeioajze@])";;
bar = foo(lkjlkjlkj: lkjlkjlkj,
lkjlkjlkjlj: lkjlkjlkjlkj,
lkjj: lkjlk,
aze: azeioajze)- : unit = ()
这是意料之中的。打开一个框不会导致剪切,所以如果你想在foo之后换行,你应该写@[@,。我无法复制。我得到了这个:
# Format.fprintf Format.std_formatter "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk,@ aze: azeioajze@])";;
bar = foo(lkjlkjlkj: lkjlkjlkj,
lkjlkjlkjlj: lkjlkjlkjlkj,
lkjj: lkjlk,
aze: azeioajze)- : unit = ()
这是意料之中的。打开一个框不会导致剪切,所以如果你想在foo之后换行,你应该写@[@,。如果我没有弄错,你的问题的根源是最大缩进限制;如果你的代码以Format.set_margin 20开头,那么它的副作用就是将最大缩进限制也设置为10 这意味着本应以大于10的缩进打开的箱子将被推到新行,并以0的缩进打开 换句话说,
Format.set_margin 20;;
Format.printf "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk,@ aze: azeioajze@])@.";;
设置边距后,将最大缩进限制设置为11可部分解决此问题:
Format.set_margin 20; Format.set_max_indent 11;
Format.printf "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk,@ aze: azeioajze@])@.";;
换句话说,高压箱是在不需要断线的情况下打开的;但是压痕没有增加
将最大缩进设置为介于12和18之间的值
Format.set_margin 20; Format.set_max_indent 12;
Format.printf "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk,@ aze: azeioajze@])@.";;
这里的附加信息可能是,您应该始终按此顺序同时设置边距和最大缩进限制。如果我没有弄错的话,您的问题的根源是最大缩进限制;如果您的代码以Format.set_margin 20开头,那么它也会产生设置最大缩进的副作用限制在10 这意味着本应以大于10的缩进打开的箱子将被推到新行,并以0的缩进打开 换句话说,
Format.set_margin 20;;
Format.printf "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk,@ aze: azeioajze@])@.";;
设置边距后,将最大缩进限制设置为11可部分解决此问题:
Format.set_margin 20; Format.set_max_indent 11;
Format.printf "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk,@ aze: azeioajze@])@.";;
换句话说,高压箱是在不需要断线的情况下打开的;但是压痕没有增加
将最大缩进设置为介于12和18之间的值
Format.set_margin 20; Format.set_max_indent 12;
Format.printf "bar = foo(@[<hv 1>lkjlkjlkj: lkjlkjlkj,@ lkjlkjlkjlj: lkjlkjlkjlkj,@ lkjj: lkjlk,@ aze: azeioajze@])@.";;
这里的附加信息可能是,您应该始终同时按此顺序设置边距和最大缩进限制。啊,是的,这是预期输出中的错误。我更正了它。啊,是的,这是预期输出中的错误。我更正了它。