如何在 utop 中生成多行代码?
Posted
技术标签:
【中文标题】如何在 utop 中生成多行代码?【英文标题】:How can I produce multiline code in utop? 【发布时间】:2022-01-19 22:20:51 【问题描述】:在 Haskell 中,我们可以在终端输入多行代码,方法是将其括在“:”和“:”之间。例如,键入
> : main = do
> print("Hello") :
在 ghci 中,我们可以调用 main
。我们如何在 Ocaml on utop 中做到这一点?
【问题讨论】:
只需输入表达式,使用回车创建一个新行。仅在输入终止序列;;
后才对其进行评估。
在 utop 中,请注意向上和向下箭头键将在您的历史记录中循环,而不是在当前表达式中移动。但是,您可以使用左右箭头键在当前表达式中移动光标以进行编辑。这适用于多行表达式。
还有用于垂直移动光标的键盘快捷键:Ctrl+p
(resp. Ctrl+n
) 将光标向上(向下)移动一行;另外,Ctrl+a
/ Ctrl+e
用于移动到当前行的开头/结尾。同样相关的,您可能对this 感兴趣。
【参考方案1】:
cmets 很好地解决了这个问题,但只要有答案,就没有魔法。传统的 OCaml 顶层 (只需使用 ocaml
调用) 和 utop
都会读入,直到找到终止的 ;;
令牌。
例如:
─( 17:36:11 )─< command 0 >─────────────────────────────────────────────────────────────────────────────────────────────────── counter: 0 ─
utop # print_endline
"Hello, world!";;
Hello, world!
- : unit = ()
─( 17:36:11 )─< command 1 >─────────────────────────────────────────────────────────────────────────────────────────────────── counter: 0 ─
utop # let msg = "Hello, world!"
in
print_endline msg;;
Hello, world!
- : unit = ()
【讨论】:
以上是关于如何在 utop 中生成多行代码?的主要内容,如果未能解决你的问题,请参考以下文章
pyspark groupby 使用 String groupby 键在输出中生成多行