在链接“ let”语句时更好使用“ and”或“ in”?
|
我意识到这可能是一个愚蠢的问题,但是...
如果我要链接一堆不需要知道彼此值的
let
语句,使用and
还是in
更好?
例如,如果有以下哪个是更可取的:
let a = \"foo\"
and b = \"bar\"
and c = \"baz\"
in
(* etc. *)
要么
let a = \"foo\" in
let b = \"bar\" in
let c = \"baz\"
in
(* etc. *)
我的直觉告诉我,前者应该是“更好的”(通过对“更好”的非常小定义),因为它创建了必要的最小范围,而后者是一个范围内的范围,在范围内,编译器/解释器会注意这一点,但最终并不重要且不必要地深入。
没有找到相关结果
已邀请:
4 个回复
栖很钾是狠
)和顺序的,基本上是嵌套作用域的形式(
),因为它们在某些情况下都很有用。 在您的情况下,语义是相同的,因此您只能回答问题“什么最适合您?”,也许(如果还不成熟,则)“可能更有效地执行?”替代方法是: 对于“ 1”例:评估一串字符串,并对三个标识符进行并行绑定。 对于
情况:将
绑定到
,然后将
绑定到
,然后将
绑定到
。 哪个更好看?在这种情况下,这是一个折腾,因为结果并不重要。您可以投票给一些说英语的人,但我怀疑会不会有很多选择。也许大多数人会喜欢
,因为它分隔了绑定,而在表达式之前留下了唯一的
。 至于执行效率更高的问题,我认为一个好的编译器可能会产生相同的代码,因为它可以检测绑定的顺序无关紧要。但是也许您有一个为多核处理器生成代码的编译器,该处理器在ѭ1时性能更好。又或者是一个幼稚的编译器,它将所有RHS写入临时存储,然后将它们绑定在一起,从而使ѭ1的情况变慢。 这些可能不是必需的优化问题,尤其是因为它们涉及绑定并且可能没有紧密的循环。 底线:在这种情况下,这确实是一个折腾;只需确保在结果很重要时正确使用并行或顺序即可。
宦哨抹存胳
更好。 ѭ1的使用意味着定义互相依赖。我认为最好弄清楚事实并非如此。另一方面,对于一些非常简短的定义,某些OCaml程序员确实更喜欢ѭ1,在这种情况下,稍微紧凑的符号看起来更清晰。当您可以将定义放在一行上时,尤其如此:
浆错
和
之间的差异相同。
(功能类似于
结构-问题中的第二个结构)有时用于隐藏命令式编程,因为它可以保证顺序执行表达式(请参阅Paul Graham关于On Lisp中let *的论述)。 因此,我想说以前的结构更好。但事实是,我认为后者在我所见过的Ocaml程序中更为常见。让一个基于先前命名的表达式构建起来可能更容易使用。
死搭胯