#:g1: method-versionsの紹介

Posted 2014-01-10 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の11日目です。

method-versionsとはなにか

 method-versionsメソッドコンビネーションでメソッドのバージョンを表現し、メソッドにバージョン付けを可能としたものです。

パッケージ情報

パッケージ名method-versions
Quicklisp
ホームページMethod-Versions :: nklein software
CLiKihttp://cliki.net/method-versions
Quickdocshttp://quickdocs.org/method-versions

インストール方法

(ql:quickload :method-versions)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 まず、バージョンを定義します。
define-method-versionの2番目の引数は、1番目に対する上位バージョンになります。

(method-versions:define-method-version :v1)
(method-versions:define-method-version :v1.1 :v1)
(method-versions:define-method-version :v1.2 :v1.1)
(method-versions:define-method-version :v2   :v1)

 次にmethod-versionsで利用するバージョン制御用の変数を定義

(defvar *version* nil)
(defgeneric hello ()
  (:method-combination method-versions:method-version-method-combination
                       *version*))

(defmethod hello () "こんにちは:デフォルト")

(defmethod hello :v1 () "こんにちは v1")

 メソッドの順位はversion-precedenceで確認することができます(エクスポートされていませんが…)

(method-versions::version-precedence :v1.1)
;=>  (:V1.1 :V1)

メソッドを実行してみる

(hello)
;=>  "こんにちは:デフォルト"

(let ((*version* :v1)) (hello)) ;=> "こんにちは v1"

(let ((*version* :v1.1)) (hello)) ;=> "こんにちは v1"

(let ((*version* :v2)) (hello)) ;=> "こんにちは v1"

まとめ

 今回は、method-versionsを紹介してみました。
メソッドコンビネーションでバージョンを表現するというのは、なかなか面白いアイデアですね。

comments powered by Disqus