gpt4 book ai didi

namespaces - 在 Racket 中,嵌套函数定义不需要 "local"吗?

转载 作者:行者123 更新时间:2023-12-04 02:37:46 26 4
gpt4 key购买 nike

我一直在研究 Racket ( http://docs.racket-lang.org/continue/) 的 Web 应用程序示例,它经常使用“本地”函数来定义仅在另一个函数中使用的函数。我不明白为什么它是必要的,因为嵌套函数已经是本地的了。

举个小例子,据我所知,这两个函数做的事情完全一样:

(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”都只能在每个函数中访问,而不能在全局命名空间中访问。那么,为什么还要费心使用本地呢?

最佳答案

“本地”形式用于教学语言,并且早于内部定义的存在。因此,如果您将语言级别设置为“中级”,您将看到没有“本地”的版本停止工作。

自然而然的下一个问题:为什么不摆脱本地?事实上,“本地”在教学语言中具有一定的值(value),至少有两个原因:

  • 当您要求学生明确说明他们生成局部变量的意图时,您可以给出更好的错误消息,并且
  • 如果我们改变教学语言,步进器会很伤心。 :)

关于namespaces - 在 Racket 中,嵌套函数定义不需要 "local"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com