challenge メソッド名一覧の表示

リフレクション系のお題の続編です。

「ある与えられたオブジェクトtargetのメソッドのうち、 "test_"で始まるものをすべて呼びだす」というコードを書いてください。 引数に関しては都合のいいように仮定して構いません(全部0個、など)。

メソッドという概念がない言語の場合は、 「複数の関数への参照を持っているようなオブジェクト(たとえばパッケージとかモジュールとか)から"test_"で始まる関数をすべて呼び出す」と読み替えても構いません。

Posted feedbacks - Scheme

GaucheではCommonLispと同様に、メソッドはクラスでなく総称関数に所属します。
ここではモジュールの中から探してみることにします。

使い方の例:
(define-module foo
  (define (test_1) (print 1))
  (define (test_2) (print 2))
  (define test_3 "I'm variable!")
  (define (test_4) (print 4)))

(call-tests (find-module 'foo))
1
2
3
4
5
6
7
(define (call-tests module)
  (hash-table-for-each (module-table module)
                       (lambda (k v)
                         (and-let* ([ (#/^test_/ (x->string k)) ]
                                    [val (global-variable-ref module k)]
                                    [ (procedure? val) ])
                           (val)))))

Index

Feed

Other

Link

Pathtraq

loading...