返回介绍

2.4 互相递归的方法

发布于 2025-02-20 00:17:06 字数 750 浏览 0 评论 0 收藏 0

上一节已经表明,方法可以通过向 self 发送消息来使用其他方法。这个例子展示相互递归的方法。

请在 Java 中尝试相同的定义,然后比较“大”数字的结果。是啊,我们的简单对象系统确实从尾调用优化中受益了!

(define odd-even
  (OBJECT ()
   ([method even (n)
            (case n
              [(0) #t]
              [(1) #f]
              [else (-> self odd (- n 1))])]
    [method odd (n)
            (case n
              [(0) #f]
              [(1) #t]
              [else (-> self even (- n 1))])])))


> (-> odd-even odd 15)
#t
> (-> odd-even odd 14)
#f
> (-> odd-even even 14)
#t

我们现在的对象系统支持 self,包括返回 self、发送消息给 self。请注意,方法中使用的 self 是在对象创建时被绑定的:在方法被定义时,它们捕获对 self 的绑定,此后该绑定就被固定了。我们将在下面的章节中看到,如果想要支持委托,或者想要支持类,这就行不通了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文