如何在 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 中生成多行代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 utop 中重新加载 OCaml 模块

pyspark groupby 使用 String groupby 键在输出中生成多行

如何在 Roslyn 代码生成器中生成数组类型?

如何在 WebStorm 编辑器中生成代码存根

如何在 C# 中生成 ALPHANUMERIC 优惠券代码? [复制]

如何在 Java 中生成音效?