Слоты в CLOS

Вы можете использовать lodash для этого

var arr = ['A', 'B', 'C', 'a', 'b']

console.log(_.sortBy(arr, function (val) {
	return val.toLowerCase();
}));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

6
задан 10 March 2009 в 10:40
поделиться

2 ответа

Ваш пример является немного неправильным. Это должно быть:

(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 говорит Вам, каков параметр для ДЕЛАТЬ-ЭКЗЕМПЛЯРА. (делать-экземпляр 'нечто: data1arg 10); создает объект и устанавливает слот data1 на 10. Обычно необходимо использовать символ ключевого слова (как: data1arg здесь).

:INITFORM устанавливает слот по умолчанию, когда объект создается. Как в: (делать-экземпляр 'нечто); создает объект. Слот установлен на значение initform.

:TYPE указывает тип объекта слота.

:DOCUMENTATION является просто строкой для, ну, в общем, документации.

:ACCESSOR указывает функцию, чтобы считать и записать слот.

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

Обратите внимание, что можно записать пар в любом порядке и что можно также указать несколько функций средства доступа. Существуют также: ЧИТАТЕЛЬ и: функции УСТРОЙСТВА ЗАПИСИ.

С CLOS можно указать все это в рамках макроса DEFCLASS. Эти вещи автоматически не сгенерированы как в defstruct, который имеет более короткую нотацию.

Описание DEFCLASS здесь: DEFCLASS. Короткое Введение CLOS.

8
ответ дан 10 December 2019 в 02:54
поделиться

В спецификации слота общий синтаксис (имя слота [значение опции опции слота]...). По-существу-authoritatiev ссылка является страницей HyperSpec на defclass, но короче говоря:

:reader функция для чтения значения слота
:writer функция для записи значения слота
:accessor функция для и чтения и (через SETF) устанавливают значение слота
:initarg символ для устанавливания значения слота от ДЕЛАТЬ-ЭКЗЕМПЛЯРА

Существуют больше, но тот список является четырьмя, которые я главным образом использую (на самом деле, я главным образом использую: initarg и один из: средство доступа или: читатель).

1
ответ дан 10 December 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: