Guile Scheme 之 GOOPS

发布于 2022-09-03 20:59:34 字数 337 浏览 20 评论 1

本帖最后由 Lispor 于 2010-11-29 22:39 编辑

GOOPS(Guile Object-Oriented Programming System)
Guile 的一个面向对象系统扩展模块, 类似于 CLOS(Common Lisp Object System), 适用于 scheme 环境.

GOOPS文档: goops manual

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

栖竹 2022-09-07 02:24:55

本帖最后由 Lispor 于 2010-11-30 23:39 编辑

加载 goops 模块:

  1. guile> (use-modules (oop goops))

复制代码让我们先看几个例子:

1. 重载 + 函数, 以使字符串可以相加, 结果为字符串的顺序组合:

  1. guile> (define-method (+ (x <string>) (y <string>))
  2. ...        (string-append x y))
  3. guile> (+ "abc" "def")
  4. "abcdef"
  5. guile> (+ "abc" "123" "def")
  6. "abc123def"

复制代码2. 类型定义

  1. guile> (define-class <2d-vector> ()
  2. ...        (x #:init-value 0 #:accessor x #:init-keyword #:x)
  3. ...        (y #:init-value 0 #:accessor y #:init-keyword #:y))

复制代码这样我们就定义了一个数学中二维向量, 其中有两个属性: x 和 y.

3. 对象生成
可以用 make 来创建一个二维向量:

  1. guile> (define v1 (make <2d-vector>))               ; x, y 被设为默认值 (0, 0)
  2. guile> (define v2 (make <2d-vector> #:x 1 #:y 2))   ; x, y 被设为 (1, 2)
  3. guile> v1
  4. #<<2d-vector> b75fe9e0>
  5. guile> v2
  6. #<<2d-vector> b75fde80>

复制代码4. 对象属性
可以访问和改变对象的 x 和 y 的值:

  1. guile> (x v1)
  2. 0
  3. guile> (y v1)
  4. 0
  5. guile> (x v2)
  6. 1
  7. guile> (y v2)
  8. 2
  9. guile> (set! (x v1) 3)
  10. guile> (set! (y v1) 4)
  11. guile> (x v1)
  12. 3
  13. guile> (y v1)
  14. 4

复制代码5. 重载函数
可以重载 +, 以使向量相加:

  1. guile> (define-method (+ (v1 <2d-vector>) (v2 <2d-vector>))
  2. ...        (make <2d-vector>
  3. ...              #:x (+ (x v1) (x v2))
  4. ...              #:y (+ (y v1) (y v2))))
  5. guile> (define v3 (+ v1 v2))
  6. guile> (x v3)
  7. 4
  8. guile> (y v3)
  9. 6

复制代码6. 判断类型
可以得到一个对象的类型, 或者判断一个对象是否属于某个类型:

  1. guile> (class-of v1)
  2. #<<class> <2d-vector> b75fdc30>
  3. guile> (class-of 1)
  4. #<<class> <integer> b760ec30>
  5. guile> (is-a? v1 <2d-vector>)
  6. #t

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文