1
0
Fork 0
cl-sites/lisp-docs.github.io/cl-language-reference/chap-7/h-f-slots.html

59 lines
No EOL
45 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-chap-7/h-f-slots" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.0.1">
<title data-rh="true">7.5 Slots | Common Lisp (New) Language Reference</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://lisp-docs.github.io/cl-language-reference/img/1024px-Lisp_logo.svg.png"><meta data-rh="true" name="twitter:image" content="https://lisp-docs.github.io/cl-language-reference/img/1024px-Lisp_logo.svg.png"><meta data-rh="true" property="og:url" content="https://lisp-docs.github.io/cl-language-reference/chap-7/h-f-slots"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="google-site-verification" content="Vzaw013_bfdKeUVG89Ch3W1zC9_vH9ID2dPB9Dz0vr0"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="7.5 Slots | Common Lisp (New) Language Reference"><meta data-rh="true" name="description" content="7.5.1 Introduction to Slots"><meta data-rh="true" property="og:description" content="7.5.1 Introduction to Slots"><link data-rh="true" rel="icon" href="../img/favicon.ico"><link data-rh="true" rel="canonical" href="h-f-slots.html"><link data-rh="true" rel="alternate" href="h-f-slots.html" hreflang="en"><link data-rh="true" rel="alternate" href="h-f-slots.html" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://C1F2Q5VM6X-dsn.algolia.net" crossorigin="anonymous"><link rel="preconnect" href="https://www.google-analytics.com">
<link rel="preconnect" href="https://www.googletagmanager.com">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-8TJCE4NSF8"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-8TJCE4NSF8",{})</script>
<link rel="search" type="application/opensearchdescription+xml" title="Common Lisp (New) Language Reference" href="../opensearch.xml"><link rel="stylesheet" href="../assets/css/styles.f13b59fe.css">
<script src="../assets/js/runtime~main.02699c25.js" defer="defer"></script>
<script src="../assets/js/main.4f0a7a76.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="h-f-slots.html#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a href="../../index.html" target="_blank" rel="noopener noreferrer" class="navbar__brand"><div class="navbar__logo"><img src="../img/logo.svg" alt="Lisp Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="../img/logo.svg" alt="Lisp Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Common Lisp Docs</b></a><a href="../../docs/tutorial/index.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Tutorial</a><a href="../index.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Technical Reference</a><a href="../../docs/whylisp.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Why Lisp?</a><a href="../../docs/howto.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Guides</a></div><div class="navbar__items navbar__items--right"><a href="../../docs/contribute.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Contribute!</a><a href="../../docs/help.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Getting Help</a><a href="../../docs/about.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">About</a><a href="../../blog.html" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Blog</a><a href="https://github.com/lisp-docs" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="../index.html">Introduction</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-0/intro.html">Contents and Figures</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-1/b-b-scope-purpose-and-history.html">1. Introduction</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-2/c-b-character-syntax.html">2. Syntax</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-3/d-b-evaluation.html">3. Evaluation and Compilation</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-4/e-b-introduction.html">4. Types and Classes</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-5/f-b-generalized-reference.html">5. Data and Control Flow</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-6/g-b-the-loop-facility.html">6. Iteration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="h-b-object-creation-and-initialization.html">7. Objects</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="h-b-object-creation-and-initialization.html">7.1 Object Creation and Initialization</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="h-c-changing-the-class-of-an-instance.html">7.2 Changing the Class of an Instance</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="h-d-reinitializing-an-instance.html">7.3 Reinitializing an Instance</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="h-e-metaobjects.html">7.4 Meta</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="h-f-slots.html">7.5 Slots</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="h-g-generic-functions-and-methods.html">7.6 Generic Functions and Methods</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="../category/77-objects-dictionary.html">7.7 Objects Dictionary</a><button aria-label="Expand sidebar category &#x27;7.7 Objects Dictionary&#x27;" type="button" class="clean-btn menu__caret"></button></div></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../category/81-structures-dictionary.html">8. Structures</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-9/j-b-condition-system-concepts.html">9. Conditions</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-10/ba-b-symbol-concepts.html">10. Symbols</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-11/bb-b-package-concepts.html">11. Packages</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-12/bc-b-number-concepts.html">12. Numbers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-13/bd-b-character-concepts.html">13. Characters</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-14/be-b-cons-concepts.html">14. Conses</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-15/bf-b-array-concepts.html">15. Arrays</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-16/bg-b-string-concepts.html">16. Strings</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-17/bh-b-sequence-concepts.html">17. Sequences</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-18/bi-b-hash-table-concepts.html">18. Hash Tables</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-19/bj-b-overview-of-filenames.html">19. Filenames</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-20/ca-b-file-system-concepts.html">20. Files</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-21/cb-b-stream-concepts.html">21. Streams</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-22/cc-b-the-lisp-printer.html">22. Printer</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-23/cd-b-reader-concepts.html">23. Reader</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-24/ce-b-system-construction-concepts.html">24. System Construction</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-25/cf-b-the-external-environment.html">25. External Environment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../environments.html">26. Environments</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../meta-object-protocol.html">27. Meta Object Protocol</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../data-structures.html">28. Data Structures</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../portability/trivial-packages.html">29. Portability</a></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="../dictionary-entries.html">dictionary-entries</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="../chap-26/intro.html">Glossary</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="../index.html"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">7. Objects</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">7.5 Slots</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>7.5 Slots</h1>
<!-- -->
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="751-introduction-to-slots">7.5.1 Introduction to Slots<a href="h-f-slots.html#751-introduction-to-slots" class="hash-link" aria-label="Direct link to 7.5.1 Introduction to Slots" title="Direct link to 7.5.1 Introduction to Slots"></a></h2>
<!-- -->
<p>An <span><i>object</i></span> of <span><i>metaclass</i></span> <span><b>standard-class</b></span> has zero or more named <span><i>slots</i></span>. The <span><i>slots</i></span> of an <span><i>object</i></span> are determined by the <span><i>class</i></span> of the <span><i>object</i></span>. Each <span><i>slot</i></span> can hold one value. The <span><i>name</i></span> of a <span><i>slot</i></span> is a <span><i>symbol</i></span> that is syntactically valid for use as a variable name.</p>
<p>When a <span><i>slot</i></span> does not have a value, the <span><i>slot</i></span> is said to be <span><i>unbound</i></span>. When an unbound <span><i>slot</i></span> is read, the <span><i>generic function</i></span> <span><b>slot-unbound</b></span> is invoked. The system-supplied primary <span><i>method</i></span> for <span><b>slot-unbound</b></span> on <span><i>class</i></span> <span><b>t</b></span> signals an error. If <span><b>slot-unbound</b></span> returns, its <span><i>primary value</i></span> is used that time as the <span><i>value</i></span> of the <span><i>slot</i></span>.</p>
<p>The default initial value form for a <span><i>slot</i></span> is defined by the <!-- -->:initform<!-- --> slot option. When the <!-- -->:initform<!-- --> form is used to supply a value, it is evaluated in the lexical environment in which the <span><b>defclass</b></span> form was evaluated. The <!-- -->:initform<!-- --> along with the lexical environment in which the <span><b>defclass</b></span> form was evaluated is called a <span><i>captured initialization form</i></span>. For more details, see Section 7.1 (Object Creation and Initialization).</p>
<p>A <span><i>local slot</i></span> is defined to be a <span><i>slot</i></span> that is <span><i>accessible</i></span> to exactly one <span><i>instance</i></span>, namely the one in which the <span><i>slot</i></span> is allocated. A <span><i>shared slot</i></span> is defined to be a <span><i>slot</i></span> that is visible to more than one <span><i>instance</i></span> of a given <span><i>class</i></span> and its <em>subclasses</em>.</p>
<p>A <span><i>class</i></span> is said to define a <span><i>slot</i></span> with a given <span><i>name</i></span> when the <span><b>defclass</b></span> form for that <span><i>class</i></span> contains a <span><i>slot specifier</i></span> with that <span><i>name</i></span>. Defining a <span><i>local slot</i></span> does not immediately create a <span><i>slot</i></span>; it causes a <span><i>slot</i></span> to be created each time an <span><i>instance</i></span> of the <span><i>class</i></span> is created. Defining a <span><i>shared slot</i></span> immediately creates a <span><i>slot</i></span>.</p>
<p>The <!-- -->:allocation<!-- --> slot option to <span><b>defclass</b></span> controls the kind of <span><i>slot</i></span> that is defined. If the value of the <!-- -->:allocation<!-- --> slot option is <!-- -->:instance<!-- -->, a <span><i>local slot</i></span> is created. If the value of <!-- -->:allocation<!-- --> is <!-- -->:class<!-- -->, a <span><i>shared slot</i></span> is created.</p>
<p>A <span><i>slot</i></span> is said to be <span><i>accessible</i></span> in an <span><i>instance</i></span> of a <span><i>class</i></span> if the <span><i>slot</i></span> is defined by the <span><i>class</i></span> of the <span><i>instance</i></span> or is inherited from a <span><i>superclass</i></span> of that <span><i>class</i></span>. At most one <span><i>slot</i></span> of a given <span><i>name</i></span> can be <span><i>accessible</i></span> in an <span><i>instance</i></span>. A <span><i>shared slot</i></span> defined by a <span><i>class</i></span> is <span><i>accessible</i></span> in all <span><i>instances</i></span> of that <span><i>class</i></span>. A detailed explanation of the inheritance of <span><i>slots</i></span> is given in Section 7.5.3 (Inheritance of Slots and Slot Options).</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="752-accessing-slots">7.5.2 Accessing Slots<a href="h-f-slots.html#752-accessing-slots" class="hash-link" aria-label="Direct link to 7.5.2 Accessing Slots" title="Direct link to 7.5.2 Accessing Slots"></a></h2>
<!-- -->
<p><span><i>Slots</i></span> can be <em>accessed</em> in two ways: by use of the primitive function <span><b>slot-value</b></span> and by use of <em>generic functions</em> generated by the <span><b>defclass</b></span> form.</p>
<p>The <span><i>function</i></span> <span><b>slot-value</b></span> can be used with any of the <span><i>slot</i></span> names specified in the <span><b>defclass</b></span> form to <span><i>access</i></span> a specific <em>slot accessible</em> in an <span><i>instance</i></span> of the given <span><i>class</i></span>.</p>
<p>The macro <span><b>defclass</b></span> provides syntax for generating <span><i>methods</i></span> to read and write <span><i>slots</i></span>. If a reader <span><i>method</i></span> is requested, a <span><i>method</i></span> is automatically generated for reading the value of the <span><i>slot</i></span>, but no <span><i>method</i></span> for storing a value into it is generated. If a writer <span><i>method</i></span> is requested, a <span><i>method</i></span> is automatically generated for storing a value into the <span><i>slot</i></span>, but no <span><i>method</i></span> for reading its value is generated. If an accessor <span><i>method</i></span> is requested, a <span><i>method</i></span> for reading the value of the <span><i>slot</i></span> and a <span><i>method</i></span> for storing a value into the <span><i>slot</i></span> are automatically generated. Reader and writer <span><i>methods</i></span></p>
<p>are implemented using <span><b>slot-value</b></span>.</p>
<p>When a reader or writer <span><i>method</i></span> is specified for a <span><i>slot</i></span>, the name of the <em>generic function</em> to which the generated <span><i>method</i></span> belongs is directly specified. If the <span><i>name</i></span> specified for the writer <span><i>method</i></span> is the symbol name, the <span><i>name</i></span> of the <em>generic function</em> for writing the <span><i>slot</i></span> is the symbol name, and the <em>generic function</em> takes two arguments: the new value and the <span><i>instance</i></span>, in that order. If the <span><i>name</i></span> specified for the accessor <span><i>method</i></span> is the symbol name, the <span><i>name</i></span> of the <em>generic function</em> for reading</p>
<p>the <span><i>slot</i></span> is the symbol name, and the <span><i>name</i></span> of the <em>generic function</em> for writing the <span><i>slot</i></span> is the list (setf name).</p>
<p>A <span><i>generic function</i></span> created or modified by supplying <!-- -->:reader<!-- -->, <!-- -->:writer<!-- -->, or <!-- -->:accessor<!-- --> <span><i>slot</i></span> options can be treated exactly as an ordinary <span><i>generic function</i></span>.</p>
<p>Note that <span><b>slot-value</b></span> can be used to read or write the value of a <span><i>slot</i></span> whether or not reader or writer <span><i>methods</i></span> exist for that <span><i>slot</i></span>. When <span><b>slot-value</b></span> is used, no reader or writer <span><i>methods</i></span> are invoked.</p>
<p>The macro <span><b>with-slots</b></span> can be used to establish a <span><i>lexical environment</i></span> in which specified <span><i>slots</i></span> are lexically available as if they were variables. The macro <span><b>with-slots</b></span> invokes the <span><i>function</i></span> <span><b>slot-value</b></span> to <span><i>access</i></span> the specified <span><i>slots</i></span>.</p>
<p>The macro <span><b>with-accessors</b></span> can be used to establish a lexical environment in which specified <span><i>slots</i></span> are lexically available through their accessors as if they were variables. The macro <span><b>with-accessors</b></span> invokes the appropriate accessors to <span><i>access</i></span> the specified <span><i>slots</i></span>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="753-inheritance-of-slots-and-slot-options">7.5.3 Inheritance of Slots and Slot Options<a href="h-f-slots.html#753-inheritance-of-slots-and-slot-options" class="hash-link" aria-label="Direct link to 7.5.3 Inheritance of Slots and Slot Options" title="Direct link to 7.5.3 Inheritance of Slots and Slot Options"></a></h2>
<!-- -->
<!-- -->
<p>The set of the <span><i>names</i></span> of all <em>slots accessible</em> in an <span><i>instance</i></span> of a <em>class C</em> is the union of the sets of <span><i>names</i></span> of <span><i>slots</i></span> defined by <em>C</em> and its <em>superclasses</em>. The structure of an <span><i>instance</i></span> is the set of <span><i>names</i></span> of <span><i>local slots</i></span> in that <span><i>instance</i></span>.</p>
<p>In the simplest case, only one <span><i>class</i></span> among <em>C</em> and its <em>superclasses</em> defines a <span><i>slot</i></span> with a given <span><i>slot</i></span> name. If a <span><i>slot</i></span> is defined by a <span><i>superclass</i></span> of <em>C</em>, the <span><i>slot</i></span> is said to be inherited. The characteristics of the <span><i>slot</i></span> are determined by the <span><i>slot specifier</i></span> of the defining <span><i>class</i></span>. Consider the defining <span><i>class</i></span> for</p>
<p>a slot <em>S</em>. If the value of the <!-- -->:allocation<!-- --> slot option is <!-- -->:instance<!-- -->, then <em>S</em> is a <span><i>local slot</i></span> and each <span><i>instance</i></span> of <em>C</em> has its own <span><i>slot</i></span> named <em>S</em> that stores its own value. If the value of the <!-- -->:allocation<!-- --> slot option is <!-- -->:class<!-- -->, then <em>S</em> is a <span><i>shared slot</i></span>, the <span><i>class</i></span> that defined <em>S</em> stores the value, and all <span><i>instances</i></span> of <em>C</em> can <span><i>access</i></span> that single <span><i>slot</i></span>. If the <!-- -->:allocation<!-- --> slot option is omitted, <!-- -->:instance<!-- --> is used.</p>
<p>In general, more than one <span><i>class</i></span> among <em>C</em> and its <em>superclasses</em> can define a <span><i>slot</i></span> with a given <span><i>name</i></span>. In such cases, only one <span><i>slot</i></span> with the given name is <span><i>accessible</i></span> in an <span><i>instance</i></span> of <em>C</em>, and the characteristics of that <span><i>slot</i></span> are a combination of the several <span><i>slot</i></span> specifiers, computed as follows:</p>
<p><em></em> All the <span><i>slot specifiers</i></span> for a given <span><i>slot</i></span> name are ordered from most specific to least specific, according to the order in <em>C</em>s <span><i>class precedence list</i></span> of the <em>classes</em> that define them. All references to the specificity of <span><i>slot specifiers</i></span> immediately below refers to this ordering.</p>
<p><em></em> The allocation of a <span><i>slot</i></span> is controlled by the most specific <span><i>slot specifier</i></span> . If the most specific <span><i>slot specifier</i></span> does not contain an <!-- -->:allocation<!-- --> slot option, <!-- -->:instance<!-- --> is used. Less specific <span><i>slot specifiers</i></span> do not affect the allocation.</p>
<p><em></em> The default initial value form for a <span><i>slot</i></span> is the value of the <!-- -->:initform<!-- --> slot option in the most specific <span><i>slot specifier</i></span> that contains one. If no <span><i>slot specifier</i></span> contains an <!-- -->:initform<!-- --> slot option, the <span><i>slot</i></span> has no default initial value form.</p>
<p><i></i> The contents of a <i>slot</i> will always be of type (and <i>T</i><sub>1</sub> <i>. . . T<sub>n</sub></i>) where <i>T</i><sub>1</sub> <i>. . . T<sub>n</sub></i> are the values of the <!-- -->:type<!-- --> slot options contained in all of the <i>slot specifiers</i>. If no <i>slot specifier</i> contains the <!-- -->:type<!-- --> slot option, the contents of the <i>slot</i> will always be of <i>type</i> <b>t</b>. The consequences of attempting to store in a <i>slot</i> a value that does not satisfy the <i>type</i> of the <i>slot</i> are undefined.</p>
<p><em></em> The set of initialization arguments that initialize a given <span><i>slot</i></span> is the union of the initialization arguments declared in the <!-- -->:initarg<!-- --> slot options in all the <span><i>slot specifiers</i></span>.</p>
<p><em></em> The <span><i>documentation string</i></span> for a <span><i>slot</i></span> is the value of the <!-- -->:documentation<!-- --> slot option in the most specific <span><i>slot</i></span> specifier that contains one. If no <span><i>slot specifier</i></span> contains a <!-- -->:documentation<!-- --> slot option, the <span><i>slot</i></span> has no <span><i>documentation string</i></span>.</p>
<p>A consequence of the allocation rule is that a <span><i>shared slot</i></span> can be <em>shadowed</em>. For example, if a class <em>C</em><sub>1</sub> defines a <span><i>slot</i></span> named <em>S</em> whose value for the <!-- -->:allocation<!-- --> slot option is <!-- -->:class<!-- -->, that <span><i>slot</i></span> is <span><i>accessible</i></span> in <span><i>instances</i></span> of <em>C</em><sub>1</sub> and all of its <em>subclasses</em>. However, if <em>C</em><sub>2</sub> is a <span><i>subclass</i></span> of <em>C</em><sub>1</sub> and also defines a <span><i>slot</i></span> named <em>S</em>, <em>C</em><sub>1</sub>s <span><i>slot</i></span> is not shared by <span><i>instances</i></span> of <em>C</em><sub>2</sub> and its <em>subclasses</em>. When a class <em>C</em><sub>1</sub> defines a <span><i>shared slot</i></span>, any subclass <em>C</em><sub>2</sub> of <em>C</em><sub>1</sub> will share this single <span><i>slot</i></span> unless the <span><b>defclass</b></span> form for <em>C</em><sub>2</sub> specifies a <span><i>slot</i></span> of the same <span><i>name</i></span> or there is a <span><i>superclass</i></span> of <em>C</em><sub>2</sub> that precedes <em>C</em><sub>1</sub> in the <span><i>class precedence list</i></span> of <em>C</em><sub>2</sub> that defines a <span><i>slot</i></span> of the same name.</p>
<p>A consequence of the type rule is that the value of a <span><i>slot</i></span> satisfies the type constraint of each <span><i>slot specifier</i></span> that contributes to that <span><i>slot</i></span>. Because the result of attempting to store in a <span><i>slot</i></span> a value that does not satisfy the type constraint for the <span><i>slot</i></span> is undefined, the value in a <span><i>slot</i></span> might fail to satisfy its type constraint.</p>
<p>The <!-- -->:reader<!-- -->, <!-- -->:writer<!-- -->, and <!-- -->:accessor<!-- --> slot options create <span><i>methods</i></span> rather than define the characteristics of a <span><i>slot</i></span>. Reader and writer <span><i>methods</i></span> are inherited in the sense described in Section 7.6.7 (Inheritance of Methods).</p>
<p><span><i>Methods</i></span> that <em>access slots</em> use only the name of the <span><i>slot</i></span> and the <span><i>type</i></span> of the <span><i>slot</i></span>s value. Suppose a <span><i>superclass</i></span> provides a <span><i>method</i></span> that expects to <span><i>access</i></span> a <span><i>shared slot</i></span> of a given <span><i>name</i></span>, and a <span><i>subclass</i></span> defines a <span><i>local slot</i></span> with the same <span><i>name</i></span>. If the <span><i>method</i></span> provided by the <span><i>superclass</i></span> is used on an <span><i>instance</i></span> of the <span><i>subclass</i></span>, the <em>method accesses</em> the <span><i>local slot</i></span>.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/lisp-docs/cl-language-reference/tree/main/docs/chap-7/h-f-slots.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"><span class="theme-last-updated">Last updated<!-- --> by <b>daninus14</b></span></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="h-e-metaobjects.html"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">7.4 Meta</div></a><a class="pagination-nav__link pagination-nav__link--next" href="h-g-generic-functions-and-methods.html"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">7.6 Generic Functions and Methods</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="h-f-slots.html#751-introduction-to-slots" class="table-of-contents__link toc-highlight">7.5.1 Introduction to Slots</a></li><li><a href="h-f-slots.html#752-accessing-slots" class="table-of-contents__link toc-highlight">7.5.2 Accessing Slots</a></li><li><a href="h-f-slots.html#753-inheritance-of-slots-and-slot-options" class="table-of-contents__link toc-highlight">7.5.3 Inheritance of Slots and Slot Options</a></li></ul></div></div></div></div></main></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a href="../../docs/tutorial.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Common Lisp Tutorial</a></li><li class="footer__item"><a href="../index.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Common Lisp Technical Reference</a></li><li class="footer__item"><a href="../../docs/help.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Help</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/common-lisp" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://discord.gg/hhk46CE" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.reddit.com/r/common_lisp" target="_blank" rel="noopener noreferrer" class="footer__link-item">Reddit<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://irclog.tymoon.eu/libera/commonlisp" target="_blank" rel="noopener noreferrer" class="footer__link-item">IRC<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="../../blog.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog</a></li><li class="footer__item"><a href="https://github.com/lisp-docs/lisp-docs.github.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">Tutorial and General Content GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://github.com/lisp-docs/cl-language-reference/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Technical Reference GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="../../docs/contribute.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contribute to the Docs</a></li></ul></div><div class="col footer__col"><div class="footer__title">Common Lisp Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a href="../../docs/about.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">About</a></li><li class="footer__item"><a href="../../docs/whylisp.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Why Lisp</a></li><li class="footer__item"><a href="../../docs/getting-started.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Getting Started</a></li><li class="footer__item"><a href="../../docs/faq.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">FAQ</a></li><li class="footer__item"><a href="../../docs/help.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Getting Help</a></li><li class="footer__item"><a href="../../docs/howto.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">How To Guides</a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 Common Lisp Docs, MIT License (see GitHub Repo).</div></div></div></footer></div>
</body>
</html>