我正在阅读关于Ocaml嵌套版本的Ocaml Style指南。
建议
缩进嵌套的let表达式:嵌套的let表达式的代码块不应缩进。 坏:
let x = exp1 in
let y = exp2 in
x + y
好:
let x = exp1 in
let y = exp2 in
x + y
但是,您如何考虑如何缩进我的以下程序?
let f =
let g = 3 in
g + 2
以上内容由emacs缩进。但显然,这些emacs的缩进违反了我之前引用的风格指南。要遵循这种风格,不应该更像这个吗?
let f =
let g = 3 in
g + 2
感谢您的想法。
@Gilles:在我当前的默认图阿雷格模式中,我得到了这样的缩进,这与你的不同
let f =
let g = 3 in
let h = 4 in
g + 2
你能解释我应该采取哪种配置来使你的图阿雷格模式缩进吗?
答案 0 :(得分:4)
官方caml-mode
(标准Ocaml发行版的一部分)默认不会将let
表达式的主体置于其中:
let f =
let g = 3 in
let h = 4 in
g + 2
这是Ocaml作者使用的风格(因此是正确的风格)。根据我的经验,官方模式与官方风格非常匹配(不足为奇,因为它来自同一个人)。如果您得到的不同,您(或在您的机器上安装该模式的人员或分销商)必须已配置它。
Tuareg mode在我的机器上的片段(Debian squeeze)上添加了相同的缩进。不同的版本有不同的缩进默认值;特别是,这是2.0.1上tuareg-in-indent
的文档字符串:
要从
in
关键字缩进多少空格。
Upstream建议0,这是我们自2.0.1以来默认的内容,而不是历史tuareg-default-indent
。
答案 1 :(得分:3)
我认为Tuareg确实有一些奇怪的行为,缩进嵌套的let-in。添加这些行以返回“默认”ocaml缩进样式,建议 C. TROESTLER
(add-hook 'tuareg-mode-hook
(function (lambda ()
(setq tuareg-in-indent 0)
(setq tuareg-let-always-indent t)
(setq tuareg-let-indent tuareg-default-indent)
(setq tuareg-with-indent 0)
(setq tuareg-function-indent 0)
(setq tuareg-fun-indent 0)
(setq tuareg-parser-indent 0)
(setq tuareg-match-indent 0)
(setq tuareg-begin-indent tuareg-default-indent)
(setq tuareg-parse-indent tuareg-default-indent); .mll
(setq tuareg-rule-indent tuareg-default-indent)
(setq tuareg-font-lock-symbols nil)
)))