我一直在研究Racket(http://docs.racket-lang.org/continue/)的Web应用程序示例,它经常使用“local”函数来定义仅在另一个函数中使用的函数。我不明白为什么它是必要的,因为嵌套函数无论如何已经是本地的。
以玩具为例,这两个函数完全相同,据我所知:
(define (times6-v1 x)
(define (times2 y)
(* 2 y))
(* 3 (times2 x)))
(define (times6-v2 x)
(local
[(define (times2 y)
(* 2 y))]
(* 3 (times2 x))))
无论哪种方式,“times2”只能在每个函数中访问,而不能在全局命名空间中访问。那么,为什么还要使用本地?
答案 0 :(得分:2)
本地'表格用于教学语言,并预先确定内部定义的存在。因此,如果您将语言级别设置为"中级",您将看到没有' local'的版本。停止工作。
自然的下一个问题:为什么不摆脱本地?事实是,本地'在教学语言中有一些价值,至少有两个原因:
答案 1 :(得分:2)
在Racket中,与学生语言相反,local
允许使用与顶层相同的形式表达语法和值:例如。 define
。 define-for-syntax
等等。
请参阅:racket/local
与various let
forms进行比较。