2

この警告はどういう意味ですか? この警告とともに、以下で使用した例があります。私はどこかで間違っていますか?

(defvar B_00 0)
(defvar B_000 0)
(defvar w_000 0)
(defvar w_00 0)
(defconstant white 0)

(defclass board ()
 ((blocker    :accessor blocker    :initarg :blocker    :initform  0)
  (friends    :accessor friends    :initarg :friends    :initform (make-array '(2)))
  (kings      :accessor kings      :initarg :kings      :initform (make-array '(2)))
  (boards     :accessor boards     :initarg :boards     :initform (make-array '(2 7) :initial-element 0))
  (enpassant  :accessor enpassant  :initarg :enpassant  :initform -1)
  (color      :accessor color      :initarg :color      :initform  WHITE)
  (castling   :accessor castling   :initarg :castling   :initform  (logior B_000 B_00 W_000 W_00))
  (hasCastled :accessor hasCastled :initarg :hasCastled :initform  (make-array '(2) :initial-element nil))
  (fifty      :accessor fifty      :initarg :fifty      :initform 0)
  (checked    :accessor checked    :initarg :checked    :initform nil)
  (opchecked  :accessor opchecked  :initarg :opchecked  :initform nil)
  (arBoard    :accessor arBoard    :initarg :arBoard    :initform (make-array '(64))) 
  (hash       :accessor hash       :initarg :hash       :initform 0)
  (pawnhash   :accessor pawnhash   :initarg :pawnhash   :initform 0)
  (history    :accessor history    :initarg :history    :initform '())))

(defmethod ischecked ((b board)) b)
4

1 に答える 1

6

ジェネリック関数を実装するメソッドを定義する前に、 DEFGENERICを使用してジェネリック関数を定義する必要があります。一致するジェネリック関数定義がないメソッド定義は、ジェネリック関数を自動的に (つまり、暗黙的に) 作成します。ただし、ジェネリック関数を自分で定義する場合は、固有の機能が必要ない場合でもdefgeneric(インターフェイスのドキュメントを参照することをお勧めします)、メソッド定義で名前のスペルを間違えると警告が表示されます。また、引数が変更されてメソッド間で不一致になった場合に、引数がどうあるべきかを明確にします。

于 2012-08-29T17:47:23.033 に答える