LINUX.ORG.RU

defstruct, который можно переопределять как defclass

 


0

2

Известно, что динамическое переопределение defstruct ведёт к неопределённым последствиям. Хочется иметь специальную версию defstruct с опцией, к-рая разрешает переопределять его как defclass, с сохранением всех прочих свойств defstruct-а.

Кто-нибудь в курсе про такую библиотеку? Гугл не помог.

P.S. кстати, форум на лиспере опять не работает, уже недели две как.

★★★★★

Последнее исправление: den73 (всего исправлений: 1)

Зачем? Бля, тут треды по лиспу всегда веют дикой тупизной просто.

P.S. кстати, форум на лиспере опять не работает, уже недели две как.

Судя по контингенту того сайта, такова его доля

anonymous
()

Я имею в виду, если тебе изначально нужен именно класс, то зачем тебе первично объявлять его структурой? Хочешь автогенерации accessor'ов и конструктора? Ну сделай свою макру

anonymous
()
Ответ на: комментарий от anonymous

Зачем? Бля, тут треды по лиспу всегда веют дикой тупизной просто.

Не всегда, а только те треды, которын создают Дениска и анонiмус. Правда, шни создают 90% лисповых тем.

anonymous
()

Хочется иметь специальную версию defstruct с опцией, к-рая разрешает переопределять его как defclass, с сохранением всех

прочих свойств defstruct-а.

Обычно хватает (safety 3) (speed 0).

Иначе получится что-то вроде https://github.com/pnathan/defobject/blob/master/defobject.lisp

monk ★★★★★
()
Ответ на: комментарий от monk

speed 0 не пробовал, попробую на досуге. Насколько я понимаю, если поменять слоты в структуре местами, то старые экземпляры пропадут. А в классе - не пропадут.

den73 ★★★★★
() автор топика
Ответ на: комментарий от monk

Monk, у тебя есть шанс. реально, Сбрось оковы. Ты запрограммировался на den73. На то, что все он говорит есть истина. А он порет адскую чушь, поверь сторонним наблюдателям.

Короче если хочешь, сбрось с себя тушу den73, и заживи своей жизнью.

IF NOT — Your Choice.

The21century
()

Нет никакого UB если делать правильно.

; SLIME 2.19
CL-USER> (defstruct foo x y z)
FOO
CL-USER> (setf (find-class 'foo) nil)
NIL
CL-USER> (defclass foo () (x y z))
#<STANDARD-CLASS COMMON-LISP-USER::FOO>
CL-USER> 

ну и там функции еще встроенные не забудь убрать через fmakunbound или переопределить

Ну и вот тут еще пара намеков: https://stackoverflow.com/questions/38811931/how-to-change-classs-metaclass

lovesan ★★
()
Ответ на: комментарий от lovesan

Я хочу alter table для структур. Для классов он, по сути, есть. Для структур, вообще говоря, нет. Я хочу иметь просто опцию в defstruct, что она ведёт себя при переопределении как класс (данные и экземпляры сохраняются). Конечно, за свою цену.

den73 ★★★★★
() автор топика
Ответ на: комментарий от lovesan

Ну и вот тут еще пара намеков

Вот к примеру ты, где в последний раз лишпег использовал и не просто использовал, но и заработал на хлеб с икрой?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.