ソースを見ると、cl-dbiはdbiというpackageだった。
(defpackage dbi (:use :cl :dbi.error) (:nicknames :cl-dbi) (:import-from :dbi.driver :list-all-drivers
CL-USER> (cl-dbi::select "123")
; in: DBI::SELECT "123"
; (DBI::SELECT "123")
;
; caught STYLE-WARNING:
; undefined function: DBI::SELECT
;
; compilation unit finished
; Undefined function:
; DBI::SELECT
; caught 1 STYLE-WARNING condition
; Evaluation aborted on #<UNDEFINED-FUNCTION SELECT {10065F6893}>.
それに気づかずに、自分もdbiというpackageにしたら。
CL-USER> (defpackage dbi (:use :cl :cl-dbi) (:nicknames :keiba-dbi)) (in-package :keiba-dbi) (defun select(sql) sql) WARNING: DBI also uses the following packages: (DBI.ERROR) 【割愛】 The ANSI Standard, Macro DEFPACKAGE The SBCL Manual, Variable *ON-PACKAGE-VARIANCE* SELECT
cl-cbiにselectが定義されてしまった。
DBI> (cl-dbi::select "123") "123" DBI>
うわっ。
これってcl-dbiを拡張してしまったってこと?1
関数とか、conflictしたらどうするのよ、CommonLispって変、と一瞬、思ったのだけど2、よくよく考えたらC言語とかでも関数名がかぶったら片方が有効になるだけだった。
そう思うと、javaの、あのディレクトリ構成にマップされた命名規則はconflictを避けるためのものなんだなぁ、といまさらながら。3。