【发布时间】:2021-04-03 09:15:13
【问题描述】:
这是《compiling with continuations》第16页的代码(我重写了f#):
let (x,y)=
let g(a,b:int,c)=a+c in
(g,g(1,2,3))
所以x可以是let中定义的函数g。
根据ml语法可能没问题,但是在“工程实践”中,似乎函数的“let in”中定义的函数,或者Haskell中的where和let,它应该是“私有”,就像oo语言一样,应该是函数中使用的“工具函数”。
那么示例代码对吗?也许程序可以运行,但我认为这不是一个好习惯; ml 应该阻止它,比如使用“private”。
【问题讨论】:
-
“私有”保护与范围一样,适用于名称,而不适用于值。您应该能够在函数是“一流”值的“OO”语言中做同样的事情。