Pergunta

Poderia qualquer CL'er explique 'fendas' em CLOS? Eu estou encontrando dificuldades para entender a parte após o nome do slot. Isso está em:

(DEFCLASS foo () (Data1: INITARG foo))

O que o 'INITARG' e outras coisas semelhantes significa? Estou manuais de releitura. Então, eu realmente aprecio se algum de vocês aqui poderia explicar isso para um leigo como eu.

Obrigado!

Foi útil?

Solução

O seu exemplo é um pouco errado. Tem que ser:

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

Observe o parênteses adicionado para indicar uma lista de descrições de caça-níqueis.

DEFCLASS recebe uma lista de slots. Assim, com dois slots temos:

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

DATA1 é o nome do slot. Atrás que você encontrar pares de:. Valor palavra-chave

: INITARG diz-lhe que o parâmetro para MAKE-INSTÂNCIA é. (Make-instância 'foo: data1arg 10); cria o objeto e define o data1 ranhura a 10. Normalmente, você deve usar um símbolo de palavras-chave (como: data1arg aqui).

: initForm define a ranhura por padrão, quando o objeto é criado. Como em: (Make-instância 'foo); cria o objeto. O slot está definido para o valor do initForm.

:. TYPE especifica o tipo de objeto do slot

:. A documentação é apenas uma seqüência para, bem, documentação

:. ACCESSOR especifica uma função a ler e escrever o slot

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

Note que você pode escrever os pares em qualquer ordem e que você também pode especificar várias funções de acesso. Há também: funções ESCRITOR

: leitor e.

Com CLOS você pode especificar tudo o que dentro do macro DEFCLASS. Essas coisas não são gerados automaticamente como em defstruct, que tem uma notação mais curta.

A descrição do DEFCLASS está aqui: DEFCLASS . Curto CLOS Intro .

Outras dicas

Em uma especificação de caça-níqueis, a sintaxe geral é ( slot-name [ slot-opção opção de valor ] ...). A referência essencialmente-authoritatiev é a página HyperSpec em DEFCLASS , mas em suma:

: Leitor Uma função para ler o valor do slot
: escritor Uma função para escrever o valor do slot
: acessor Uma função para ambos leitura e (via SETF) definir o valor do slot
: INITARG Um símbolo para definir o valor da ranhura de MAKE-INSTÂNCIA

Há mais, mas essa lista é o de quatro Eu use (na verdade, eu principalmente usar: INITARG e um de: assessor ou: leitor).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top