1
0
Fork 0
cl-sites/lisp-docs.github.io/cl-language-reference/meta-object-protocol/dictionary/ensure-class-using-class.html

54 lines
87 KiB
HTML
Raw Normal View History

2024-03-13 23:00:32 +01:00
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-meta-object-protocol/dictionary/ensure-class-using-class" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.0.1">
<title data-rh="true">ensure-class-using-class | 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/meta-object-protocol/dictionary/ensure-class-using-class"><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="ensure-class-using-class | Common Lisp (New) Language Reference"><meta data-rh="true" name="description" content="Generic Function ENSURE-CLASS-USING-CLASS"><meta data-rh="true" property="og:description" content="Generic Function ENSURE-CLASS-USING-CLASS"><link data-rh="true" rel="icon" href="../../img/favicon.ico"><link data-rh="true" rel="canonical" href="ensure-class-using-class.html"><link data-rh="true" rel="alternate" href="ensure-class-using-class.html" hreflang="en"><link data-rh="true" rel="alternate" href="ensure-class-using-class.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="ensure-class-using-class.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
<p><em>Generic Function</em> <strong>ENSURE-CLASS-USING-CLASS</strong></p>
<p><strong>Syntax:</strong></p>
<p><strong>ensure-class-using-class</strong> <em>class</em> <em>name</em> <code>&amp;key</code> <code>:direct-default-initargs</code> <code>:direct-slots</code> <code>:direct-superclasses</code> <code>:name</code> <code>:metaclass</code> =&gt; <em>resulting-class</em></p>
<p><strong>Arguments and values:</strong></p>
<p><em>class</em> -- A class metaobject or <code>NIL</code>.</p>
<p><em>name</em> -- A class name.</p>
<p><code>:metaclass</code> -- A class metaobject class or a class metaobject class name. If this argument is not supplied, it defaults to the class named <code>standard-class</code>. If a class name is supplied, it is interpreted as the class with that name. If a class name is supplied, but there is no such class, an error is signaled.</p>
<p><code>:direct-superclasses</code> -- A list of which each element is a class metaobject or a class name. An error is signaled if this argument is not a proper list.</p>
<p>For the interpretation of additional keyword arguments, see<a href="https://lisp-docs.github.io/cl-language-reference/meta-object-protocol/initialization-of-class-metaobjects">Initialization of Class Metaobjects</a>.</p>
<p><em>resulting-class</em> -- A class metaobject.</p>
<p><strong>Description:</strong></p>
<p>This generic function is called to define or modify the definition of a named class. It is called by the <code>ensure-class</code> function. It can also be called directly.</p>
<p>The first step performed by this generic function is to compute the set of initialization arguments which will be used to create or reinitialize the named class. The initialization arguments are computed from the full set of keyword arguments received by this generic function as follows:</p>
<ul>
<li>The <code>:metaclass</code> argument is not included in the initialization arguments.</li>
<li>If the <code>:direct-superclasses</code> argument was received by this generic function, it is converted into a list of class metaobjects. This conversion does not affect the structure of the supplied <code>:direct-superclasses</code> argument. For each element in the <code>:direct-superclasses</code> argument:<!-- -->
<ul>
<li>If the element is a class metaobject, that class metaobject is used.</li>
<li>If the element names a class, that class metaobject is used.</li>
<li>Otherwise an instance of the class <a href="https://lisp-docs.github.io/cl-language-reference/meta-object-protocol/class-forward-referenced-class">forward-referenced-class</a> is created and used. The proper name of the newly created forward referenced class metaobject is set to <em>name</em>.</li>
</ul>
</li>
<li>All other keyword arguments are included directly in the initialization arguments.</li>
</ul>
<p>If the <em>class</em> argument is <code>nil</code>, a new class metaobject is created by calling the <code>make-instance</code> generic function with the value of the <code>:metaclass</code> argument as its first argument, and the previously computed initialization arguments. The proper name of the newly created class metaobject is set to <em>name</em>. The newly created class metaobject is returned.</p>
<p>If the <em>class</em> argument is a forward referenced class, <code>change-class</code> is called to change its class to the value specified by the <code>:metaclass</code> argument. The class metaobject is then reinitialized with the previously initialization arguments. (This is a documented violation of the general constraint that <code>change-class</code> not be used with class metaobjects.)</p>
<p>If the class of the <em>class</em> argument is not the same as the class specified by the <code>:metaclass</code> argument, an error is signaled.</p>
<p>Otherwise, the class metaobject <em>class</em> is redefined by calling the <code>reinitialize-instance</code> generic function with <em>class</em> and the initialization arguments. The <em>class</em> argument is then returned.</p>
<p><strong>Methods:</strong></p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ensure-class-using-class-class-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-forward-referenced-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-null-name-key-metaclass-direct-superclasses-allow-other-keys"><a href="https://lisp-docs.github.io/cl-language-reference/meta-object-protocol/ensure-class-using-class-class"><strong>ensure-class-using-class</strong> (<em>class</em> class) <em>name</em> <code>&amp;key</code> <code>:metaclass</code> <code>:direct-superclasses</code> <code>&amp;allow-other-keys</code></a>
<a href="https://lisp-docs.github.io/cl-language-reference/meta-object-protocol/ensure-class-using-class-forward-referenced-class"><strong>ensure-class-using-class</strong> (<em>class</em> forward-referenced-class) <em>name</em> <code>&amp;key</code> <code>:metaclass</code> <code>:direct-superclasses</code> <code>&amp;allow-other-keys</code></a>
<a href="https://lisp-docs.github.io/cl-language-reference/meta-object-protocol/ensure-class-using-class-null"><strong>ensure-class-using-class</strong> (<em>class</em> null) <em>name</em> <code>&amp;key</code> <code>:metaclass</code> <code>:direct-superclasses</code> <code>&amp;allow-other-keys</code></a><a href="ensure-class-using-class.html#ensure-class-using-class-class-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-forward-referenced-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-null-name-key-metaclass-direct-superclasses-allow-other-keys" class="hash-link" aria-label="Direct link to ensure-class-using-class-class-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-forward-referenced-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-null-name-key-metaclass-direct-superclasses-allow-other-keys" title="Direct link to ensure-class-using-class-class-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-forward-referenced-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-null-name-key-metaclass-direct-superclasses-allow-other-keys"></a></h2></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/meta-object-protocol/dictionary/ensure-class-using-class.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="ensure-class-using-class-null.html"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ensure-class-using-class-null</div></a><a class="pagination-nav__link pagination-nav__link--next" href="ensure-class.html"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ensure-class</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="ensure-class-using-class.html#ensure-class-using-class-class-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-forward-referenced-class-name-key-metaclass-direct-superclasses-allow-other-keysensure-class-using-class-class-null-name-key-metaclass-direct-superclasses-allow-other-keys" class="table-of-contents__link toc-highlight"><strong>ensure-class-using-class</strong> (<em>class</em> class) <em>name</em> <code>&amp;key</code> <code>:metaclass</code> <code>:direct-superclasses</code> <code>&amp;allow-other-keys</code>
<strong>ensure-class-using-class</strong> (<em>class</em> forward-referenced-class) <em>name</em> <code>&amp;key</code> <code>:metaclass</code> <code>:direct-superclasses</code> <code>&amp;allow-other-keys</code>
<strong>ensure-class-using-class</strong> (<em>class</em> null) <em>name</em> <code>&amp;key</code> <code>:metaclass</code> <code>:direct-superclasses</code> <code>&amp;allow-other-keys</code></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
</body>
</html>