문제

Cl'er가 Clos에서 '슬롯'을 설명해 주시겠습니까? 슬롯 이름 뒤에 부분을 이해하기가 어렵다는 것을 알게되었습니다. 그게 :

(defclass foo () (data1 : initarg foo)))

'initarg'와 다른 비슷한 것들은 무엇을 의미합니까? 나는 매뉴얼을 다시 읽고있다. 그래서, 여기 당신이 나와 같은 평신도에게 설명 할 수 있다면 정말 감사하겠습니다.

감사!

도움이 되었습니까?

해결책

당신의 예는 약간 잘못되었습니다. 그건 그래야만 해:

(defclass foo ()
   ((data1 :initarg foo)))

슬롯 설명 목록을 표시하기 위해 추가 괄호 안에 주목하십시오.

Defclass는 슬롯 목록을 가져옵니다. 그래서 우리는 두 개의 슬롯으로 다음과 같습니다.

(defclass foo ()
   ((data1 :initarg :data1arg
           :initform (random 1.0) 
           :type number
           :documentation "doc here"
           :accessor foo-data1-acc)
    (data2 :initarg :data2arg)))

Data1은 슬롯의 이름입니다. 그 뒤에는 키워드 값의 쌍을 찾습니다.

: Initarg는 Make-Instance의 매개 변수가 무엇인지 알려줍니다. (make-instance 'foo : data1arg 10); 객체를 생성하고 슬롯 데이터 1을 10으로 설정합니다. 일반적으로 키워드 기호 (예 : Data1arg)를 사용해야합니다.

: initform 객체가 생성 될 때 기본적으로 슬롯을 설정합니다. 처럼 : (Make-Instance 'foo); 객체를 만듭니다. 슬롯은 initform의 값으로 설정됩니다.

: type 슬롯 객체의 유형을 지정합니다.

: 문서는 문서화를위한 문자열 일뿐입니다.

: 액세서는 슬롯을 읽고 쓸 수있는 함수를 지정합니다.

(foo-data1-acc some-foo-object-here)             ; read
(setf (foo-data1-acc some-foo-object-here) 7)    ; write

어떤 순서로든 쌍을 쓸 수 있으며 여러 액세서 기능을 지정할 수도 있습니다. 독자와 : 작가 기능도 있습니다.

Clos를 사용하면 Defclass 매크로 내의 모든 것을 지정할 수 있습니다. 이러한 것들은 Defstruct에서와 같이 자동으로 생성되지 않으며, 이는 더 짧은 표기법이 있습니다.

Defclass에 대한 설명은 다음과 같습니다. 수비물. 짧은 클로스 소개.

다른 팁

슬롯 사양에서 일반 구문은 다음과 같습니다.슬롯-이름 [슬롯 옵션 옵션 값] ...). 본질적으로 인증 된 참조는 다음과 같습니다 Defclass의 Hyperspec 페이지, 간단히 말해서 :

:리더 슬롯 값을 읽는 함수
:작가 슬롯 값을 작성하는 함수
: 액세서 읽기 및 (세트를 통해) 슬롯의 값을 설정하는 함수
: initarg Make-Instance에서 슬롯의 값을 설정하는 기호

더 많은 것이 있지만 그 목록은 내가 주로 사용하는 4 가지입니다 (실제로는 주로 사용합니다 : initarg와 하나의 액세서 또는 독자).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top