CINXE.COM
class Pair | Raku Documentation
<!DOCTYPE html> <html lang="en" class="fontawesome-i2svg-active fontawesome-i2svg-complete" style="scroll-padding-top:60px"> <head> <title>class Pair | Raku Documentation</title> <meta charset="UTF-8" /> <link href="/assets/images/Camelia.ico" rel="icon" type="image/x-icon"/> <link rel="stylesheet" href="/assets/css/Website.css"/> <link rel="stylesheet" href="/assets/css/typegraph-styling.css"/> <link rel="stylesheet" href="/assets/css/typegraph-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/typegraph-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/filtered-toc-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/filtered-toc-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/announce-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/announce-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/all.min.css"/> <link rel="stylesheet" href="/assets/css/listf-styling-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/listf-styling-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/options-search-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/options-search-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/page-styling-main.css"/> <link rel="stylesheet" href="/assets/css/css/page-styling-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/page-styling-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/chyronToggle-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/chyronToggle-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/css/centreToggle-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/centreToggle-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/tm-styling.css"/> <link rel="stylesheet" href="/assets/css/tm-light.css" title="light"/> <link rel="stylesheet" href="/assets/css/tm-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/rainbow-dark.css" title="dark"/> <link rel="stylesheet" href="/assets/css/css/rainbow-light.css" title="light"/> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/css/autoComplete.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-light.min.css" title="light" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css" title="dark" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="/assets/scripts/all.min.js"></script><script src="/assets/scripts/filter-script.js"></script><script src="/assets/scripts/tableManager.js"></script><script src="https://cdn.jsdelivr.net/npm/fuzzysort@2.0.4/fuzzysort.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@tarekraafat/autocomplete.js@10.2.7/dist/autoComplete.min.js"></script><script src="/assets/scripts/filtered-toc.js"></script><script src="/assets/scripts/options-search.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/haskell.min.js"></script><script src="/assets/scripts/page-styling.js"></script><script src="/assets/scripts/announcements.js"></script><script src="/assets/scripts/rainbow.js"></script> </head> <body class="has-navbar-fixed-top"> <div id="class_Pair" class="top-of-page"></div> <nav class="navbar is-fixed-top is-flex-touch" role="navigation" aria-label="main navigation"> <div class="navbar-item" style="margin-left: auto;"> <div class="left-bar-toggle" title="Toggle Table of Contents & Index"> <label class="chyronToggle left"> <input id="navbar-left-toggle" type="checkbox"> <span class="text">Contents</span> </label> </div> </div> <div class="container is-justify-content-space-around"> <div class="navbar-brand"> <div class="navbar-logo"> <a class="navbar-item" href="/"> <img src="/assets/images/camelia-recoloured.png" alt="Raku" width="52.83" height="38"> </a> <span class="navbar-logo-tm">tm</span> </div> <a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navMenu"> <span aria-hidden="true"></span> <span aria-hidden="true"></span> <span aria-hidden="true"></span> </a> </div> <div id="navMenu" class="navbar-menu"> <div class="navbar-start"> <a class="navbar-item" href="/introduction" title="Getting started, Tutorials, Migration guides"> Introduction </a> <a class="navbar-item" href="/reference" title="Fundamentals, General reference"> Reference </a> <a class="navbar-item" href="/miscellaneous" title="Programs, Experimental"> Miscellaneous </a> <a class="navbar-item" href="/types" title="The core types (classes) available"> Types </a> <a class="navbar-item" href="/routines" title="Searchable table of routines"> Routines </a> <a class="navbar-item" href="https://raku.org" title="Home page for community"> Raku<sup>®</sup> </a> <a class="navbar-item" href="https://web.libera.chat/#raku" title="IRC live chat"> Chat </a> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"> More </a> <div class="navbar-dropdown is-right is-rounded"> <hr class="navbar-divider"> <a class="navbar-item js-modal-trigger" data-target="download-ebook"> Download E-Book (epub) </a> <hr class="navbar-divider"> <a class="navbar-item" href="/about"> About </a> <hr class="navbar-divider"> <a class="navbar-item has-text-red" href="https://github.com/raku/doc-website/issues"> Report an issue with this site </a> <hr class="navbar-divider"> <a class="navbar-item" href="https://github.com/raku/doc/issues"> Report an issue with the documentation content </a> <hr class="navbar-divider"> <label class="navbar-item centreToggle" title="Enable/Disable Announcements" style="--switch-width: 18"> <input id="cancelAnnouncements" type="checkbox"> <span class="text">Announcements</span> <span class="on">suppressed</span> <span class="off">allowed</span> </label> </div> </div> </div> <div class="navbar-end navbar-search-wrapper"> <div class="navbar-item"> <div class="field has-addons"> <div class="autoComplete_options"> <input class="control input" id="autoComplete" type="search" dir="ltr" spellcheck=false autocorrect="off" autocomplete="off" autocapitalize="off" placeholder="🔍 Type f to search for ..."> </div> <div class="control" title="Search options"> <a class="button is-primary js-modal-trigger" data-target="options-search-info"> <span class="icon"> <i class="fas fa-cogs"></i> </span> </a> </div> </div> </div> </div> <div id="options-search-info" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <p>The last search was: <span id="selected-candidate" class="ss-selected"></span></p> <div class="control is-grouped is-grouped-centered options-search-controls"> <label class="centreToggle" title="Include extra information (Alt-E)" style="--switch-width: 10.5"> <input id="options-search-extra" type="checkbox"> <span class="text">Extra info</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>The search response can be shortened by excluding the extra information line (Alt-E)</p> <label class="centreToggle" title="Search engine type Strict/Loose (Alt-L)" style="--switch-width: 10.5"> <input id="options-search-loose" type="checkbox"> <span class="text">Search type</span> <span class="on">loose</span> <span class="off">strict</span> </label> <p> The search engine can perform a strict search (only the characters in the search box) or a loose search (Alt-L)</p> <label class="centreToggle" title="Search in headings (Alt-H)" style="--switch-width: 10.5"> <input id="options-search-headings" type="checkbox"> <span class="text">Headings</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through headings in all web-pages (Alt-H)</p> <label class="centreToggle" title="Search indexed items (Alt-I)" style="--switch-width: 10.5"> <input id="options-search-indexed" type="checkbox"> <span class="text">Indexed</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through all indexed items (Alt-I)</p> <label class="centreToggle" title="Search composite pages (Alt-C)" style="--switch-width: 10.5"> <input id="options-search-composite" type="checkbox"> <span class="text">Composite</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search in the names of composite pages, which combine similar information from the main web pages (Alt-C)</p> <label class="centreToggle" title="Search primary sources (Alt-P)" style="--switch-width: 10.5"> <input id="options-search-primary" type="checkbox"> <span class="text">Primary</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Search through the names of the main web pages (Alt-P)</p> <label class="centreToggle" title="Open in new tab (Alt-Q)" style="--switch-width: 10.5"> <input id="options-search-newtab" type="checkbox"> <span class="text">New tab</span> <span class="on">yes</span> <span class="off">no</span> </label> <p>Once a search candidate has been chosen, it can be opened in a new tab or in the current tab (Alt-Q)</p> <p>If all else fails, an item is added to use the Google search engine on the whole site</p> <button class="button is-warning" id="options-search-reset-defaults">Clear options, reset to defaults</button> <p>Exit this page by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> </div> <div id="download-ebook" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <p><a href="/RakuDocumentation.epub" download>RakuDocumentation.epub</a> is a work in progress e-book. It targets the <a href="https://www.w3.org/publishing/epub3/">EPUB v3 specification</a>. It needs testing on a variety of ereaders (some of which may still implicitly expect compliance with EPUB v2). The CSS definitely needs enhancing (especially for code snippets). The Ebook opens in a Calibre reader, which is available on all operating systems.</p> <p>Suggestions are welcome and should be addressed by opening an issue on the Raku/doc-website repository</p> <p>Exit this popup by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> <div id="announcement-modal" class="modal"> <div class="modal-background"></div> <div class="modal-content"> <div class="box"> <div id="raku-doc-announcement"></div> <p>For more see <a href="/announcements">Announcements page</a>.</p> <p>Exit this popup by pressing <Escape>, or clicking on X or on the background.</p> </div> </div> <button class="modal-close is-large" aria-label="close"></button> </div> </div> </nav> <div class="tile is-ancestor section"> <div class="page-edit"> <a class="button page-edit-button" href="https://github.com/Raku/doc/edit/main/doc/Type/Pair.rakudoc" title="Edit this page. Commit: 414dd1bac 2024-07-13"> <span class="icon is-right"> <i class="fas fa-pen-alt is-medium"></i> </span> </a> </div> <div id="left-column" class="tile is-parent is-2 is-hidden"> <div id="left-col-inner"> <div class="tabs" id="tabs"> <ul> <li class="is-active" id="toc-tab"> <a>Table of Contents</a> </li> <li id="index-tab"> <a>Index</a> </li> </ul> </div> <div class="field"> <div class="control has-icons-right"> <input id="toc-filter" class="input" type="text" placeholder="Filter"> <span class="icon is-right has-text-grey"> <i class="fas fa-search is-medium"></i> </span> </div> </div> <div class="raku-sidebar"> <aside id="toc-menu" class="menu"> <ul class="menu-list"> <li><a href="#Methods">Methods</a></li> <ul> <li><a href="#method_new">method new</a></li> <li><a href="#method_ACCEPTS">method ACCEPTS</a></li> <li><a href="#method_antipair">method antipair</a></li> <li><a href="#method_key">method key</a></li> <li><a href="#method_value">method value</a></li> <li><a href="#infix_cmp">infix cmp</a></li> <li><a href="#method_fmt">method fmt</a></li> <li><a href="#method_kv">method kv</a></li> <li><a href="#method_pairs">method pairs</a></li> <li><a href="#method_antipairs">method antipairs</a></li> <li><a href="#method_invert">method invert</a></li> <li><a href="#method_keys">method keys</a></li> <li><a href="#method_values">method values</a></li> <li><a href="#method_freeze">method freeze</a></li> <li><a href="#method_Str">method Str</a></li> <li><a href="#method_Pair">method Pair</a></li> </ul> </aside> <aside id="index-menu" class="menu is-hidden"> <ul class="menu-list"> <li>Language<ul> <li><a href="#index-entry-colon_list_(Pair)">colon list </a></li> <li><a href="#index-entry-colon_pair_(Pair)">colon pair </a></li> </ul></li> <li>Syntax<ul> <li><a href="#index-entry-:">:</a></li> <li><a href="#index-entry-:!">:!</a></li> <li><a href="#index-entry-:$">:$</a></li> <li><a href="#index-entry-=>">=></a></li> </ul></li> </ul> </aside> </div> </div> </div> <div id="main-column" class="tile is-parent" style="overflow-x: hidden;"> <div id="main-col-inner"> <section class="raku page-header"> <div class="container px-4"> <div class="raku page-title has-text-centered"> class Pair </div> <div class="raku page-subtitle has-text-centered"> <p>Key/value pair</p> </div> </div> </section> <section class="raku page-content"><div class="container px-4"><div class="columns one-col"> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">class</span> <span class="highlite-TYPE">Pair</span> <span class="highlite-KEYWORD">does</span> <span class="highlite-TYPE">Associative</span> {}</pre> </div> </div> <p>Consists of two parts, a <em>key</em> and a <em>value</em>. <code>Pair</code>s can be seen as the atomic units in <a href="/type/Hash"><code>Hash</code></a>es, and they are also used in conjunction with named arguments and parameters.</p><p><a name="index-entry-colon_pair_(Pair)" class="index-entry"></a> <a name="index-entry-:" class="index-entry"></a> <a name="index-entry-=>" class="index-entry"></a> <a name="index-entry-:!" class="index-entry"></a> <a name="index-entry-:$" class="index-entry"></a> There are many syntaxes for creating <code>Pair</code>s:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-TYPE">Pair</span>.<span class="highlite-ROUTINE">new</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">key</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">value</span><span class="highlite-STRING_DELIMITER">'</span>); <span class="highlite-COMMENT"># The canonical way </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">key</span><span class="highlite-STRING_DELIMITER">'</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">value</span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-COMMENT"># this... </span>:key<<span class="highlite-ROUTINE">value</span>>; <span class="highlite-COMMENT"># ...means the same as this </span>:key<value1 value2>; <span class="highlite-COMMENT"># But this is key => <value1 value2> </span>:foo(127); <span class="highlite-COMMENT"># short for foo => 127 </span>:127foo; <span class="highlite-COMMENT"># the same foo => 127</span></pre> </div> </div> <p>Note that last form supports Non-ASCII numerics as well:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-COMMENT"># use MATHEMATICAL DOUBLE-STRUCK DIGIT THREE </span><span class="highlite-ROUTINE">say</span> (:𝟛math-three); <span class="highlite-COMMENT"># OUTPUT: «math-three => 3»</span></pre> </div> </div> <p>But not <em>synthetic</em> (i.e. formed by a digit and additional Unicode marks):</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> :7̈a </pre> </div> </div> <p>You can also use an <em>identifier-like literal</em> as key; this will not need the quotes as long as it follows the syntax of <a href="/language/syntax#Ordinary_identifiers">ordinary identifiers</a>:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">(foo <span class="highlite-OPERATOR">=></span> 127) <span class="highlite-COMMENT"># the same foo => 127</span></pre> </div> </div> <p>Variants of this are</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">:key; <span class="highlite-COMMENT"># same as key => True </span><span class="highlite-OPERATOR">:</span>!<span class="highlite-ROUTINE">key</span>; <span class="highlite-COMMENT"># same as key => False</span></pre> </div> </div> <p>And this other variant, to be used in routine invocation</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">sub</span> colon-pair( <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$key-value</span> ) { <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$key-value</span>; } <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$key-value</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">value</span><span class="highlite-STRING_DELIMITER">'</span>; colon-pair( <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$key-value</span> ); <span class="highlite-COMMENT"># OUTPUT: «value» </span>colon-pair( key-value <span class="highlite-OPERATOR">=></span> <span class="highlite-NAME_SCALAR">$key-value</span> ); <span class="highlite-COMMENT"># OUTPUT: «value» </span></pre> </div> </div> <p><a name="index-entry-colon_list_(Pair)" class="index-entry"></a> Colon pairs can be chained without a comma to create a List of Pairs. Depending on context you may have to be explicit when assigning colon lists.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">sub</span> <span class="highlite-ROUTINE">s</span>(<span class="highlite-OPERATOR">*</span><span class="highlite-NAME_HASH">%h</span>){ <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_HASH">%h</span>.<span class="highlite-ROUTINE">raku</span> }; <span class="highlite-ROUTINE">s</span> :a1:b2; <span class="highlite-COMMENT"># OUTPUT: «{:a1, :b2}» </span> <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$manna</span> <span class="highlite-OPERATOR">=</span> :a1:b2:c3; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$manna</span>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «Pair» </span> <span class="highlite-NAME_SCALAR">$manna</span> <span class="highlite-OPERATOR">=</span> (:a1:b2:c3); <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$manna</span>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «List»</span></pre> </div> </div> <p>Any variable can be turned into a <code>Pair</code> of its name and its value.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$bar</span> <span class="highlite-OPERATOR">=</span> 10; <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$p</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$bar</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>; <span class="highlite-COMMENT"># OUTPUT: «bar => 10»</span></pre> </div> </div> <p>It is worth noting that when assigning a <a href="/type/Scalar"><code>Scalar</code></a> as value of a <code>Pair</code> the value holds the container of the value itself. This means that it is possible to change the value from outside of the <code>Pair</code> itself:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$v</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">value A</span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$pair</span> <span class="highlite-OPERATOR">=</span> a <span class="highlite-OPERATOR">=></span> <span class="highlite-NAME_SCALAR">$v</span>; <span class="highlite-NAME_SCALAR">$pair</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «a => value A» </span> <span class="highlite-NAME_SCALAR">$v</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">value B</span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-NAME_SCALAR">$pair</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «a => value B» </span></pre> </div> </div> <p>Please also note that this behavior is totally unrelated to the way used to build the <code>Pair</code> itself (i.e., explicit usage of <code>new</code>, use of colon, fat arrow), as well as if the <code>Pair</code> is bound to a variable.</p><p>It is possible to change the above behavior forcing the <code>Pair</code> to remove the scalar container and to hold the effective value itself via the method <a href="/type/Pair#method_freeze">freeze</a>:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$v</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">value B</span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$pair</span> <span class="highlite-OPERATOR">=</span> a <span class="highlite-OPERATOR">=></span> <span class="highlite-NAME_SCALAR">$v</span>; <span class="highlite-NAME_SCALAR">$pair</span>.<span class="highlite-ROUTINE">freeze</span>; <span class="highlite-NAME_SCALAR">$v</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">value C</span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-NAME_SCALAR">$pair</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «a => value B» </span></pre> </div> </div> <p>As Pair implements <a href="/type/Associative"><code>Associative</code></a> role, its value can be accessed using Associative subscription operator, however, due to Pair's singular nature, the pair's value will be only returned for the pair's key. <a href="/type/Nil"><code>Nil</code></a> object will be returned for any other key. Subscript adverbs such as <code>:exists</code> can be used on Pair.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$pair</span> <span class="highlite-OPERATOR">=</span> a <span class="highlite-OPERATOR">=></span> 5; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$pair</span><a>; <span class="highlite-COMMENT"># OUTPUT: «5» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$pair</span><a>:exists; <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$pair</span><no-such-key>; <span class="highlite-COMMENT"># OUTPUT: «Nil» </span></pre> </div> </div> <h1 id="Methods" class="raku-h1"><a href="#class_Pair" title="go to top of document">Methods<a class="raku-anchor" title="direct link" href="#Methods">§</a></a></h1> <h2 id="method_new" class="raku-h2"><a href="#class_Pair" title="go to top of document">method new<a class="raku-anchor" title="direct link" href="#method_new">§</a></a></h2> <!-- defnmark method_new 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">new</span>(Pair: <span class="highlite-TYPE">Mu</span> <span class="highlite-NAME_SCALAR">$key</span><span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Mu</span> <span class="highlite-NAME_SCALAR">$value</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">new</span>(Pair: <span class="highlite-TYPE">Mu</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$key</span><span class="highlite-OPERATOR">,</span> <span class="highlite-TYPE">Mu</span> <span class="highlite-OPERATOR">:</span><span class="highlite-NAME_SCALAR">$value</span>)</pre> </div> </div> <p>Constructs a new <code>Pair</code> object.</p> <h2 id="method_ACCEPTS" class="raku-h2"><a href="#class_Pair" title="go to top of document">method ACCEPTS<a class="raku-anchor" title="direct link" href="#method_ACCEPTS">§</a></a></h2> <!-- defnmark method_ACCEPTS 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">ACCEPTS</span>(Pair:D <span class="highlite-NAME_SCALAR">$:</span> <span class="highlite-NAME_HASH">%topic</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">ACCEPTS</span>(Pair:D <span class="highlite-NAME_SCALAR">$:</span> Pair:D <span class="highlite-NAME_SCALAR">$topic</span>) <span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">ACCEPTS</span>(Pair:D <span class="highlite-NAME_SCALAR">$:</span> <span class="highlite-TYPE">Mu</span> <span class="highlite-NAME_SCALAR">$topic</span>)</pre> </div> </div> <p>If <code>%topic</code> is an <a href="/type/Associative"><code>Associative</code></a>, looks up the value using invocant's key in it and checks invocant's value <code>.ACCEPTS</code> that value:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR">%</span>(:42a) <span class="highlite-OPERATOR">~~</span> :42a; <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-OPERATOR">%</span>(:42a) <span class="highlite-OPERATOR">~~</span> :10a; <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <p>If <code>$topic</code> is another <code>Pair</code>, checks the invocant's key and value <code>.ACCEPTS</code> the <code>$topic</code>'s key and value respectively:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> :42a <span class="highlite-OPERATOR">~~</span> :42a; <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> :42z <span class="highlite-OPERATOR">~~</span> :42a; <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> :10a <span class="highlite-OPERATOR">~~</span> :42a; <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <p>If <code>$topic</code> is any other value, the invocant <code>Pair</code>'s key is treated as a method name. This method is called on <code>$topic</code>, the <a href="/type/Bool"><code>Bool</code></a> result of which is compared against the invocant <code>Pair</code>'s <a href="/type/Bool"><code>Bool</code></a> value. For example, primality can be tested using smartmatch:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> 3 <span class="highlite-OPERATOR">~~</span> :is-prime; <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> 3 <span class="highlite-OPERATOR">~~</span> <span class="highlite-ROUTINE">is-prime</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">truthy</span><span class="highlite-STRING_DELIMITER">'</span>; <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> 4 <span class="highlite-OPERATOR">~~</span> :is-prime; <span class="highlite-COMMENT"># OUTPUT: «False»</span></pre> </div> </div> <p>This form can also be used to check <a href="/type/Bool"><code>Bool</code></a> values of multiple methods on the same object, such as <a href="/type/IO/Path"><code>IO::Path</code></a>, by using <a href="/type/Junction"><code>Junction</code></a>s:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">foo</span><span class="highlite-STRING_DELIMITER">"</span> .<span class="highlite-TYPE">IO</span> <span class="highlite-OPERATOR">~~</span> :f <span class="highlite-OPERATOR">&</span> :rw; <span class="highlite-COMMENT"># OUTPUT: «False» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">/tmp</span><span class="highlite-STRING_DELIMITER">"</span>.<span class="highlite-TYPE">IO</span> <span class="highlite-OPERATOR">~~</span> <span class="highlite-OPERATOR">:</span>!<span class="highlite-ROUTINE">f</span>; <span class="highlite-COMMENT"># OUTPUT: «True» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">.</span><span class="highlite-STRING_DELIMITER">"</span> .<span class="highlite-TYPE">IO</span> <span class="highlite-OPERATOR">~~</span> :f <span class="highlite-OPERATOR">|</span> :d; <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <h2 id="method_antipair" class="raku-h2"><a href="#class_Pair" title="go to top of document">method antipair<a class="raku-anchor" title="direct link" href="#method_antipair">§</a></a></h2> <!-- defnmark method_antipair 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">antipair</span>(Pair:D: <span class="highlite-KEYWORD">--></span> Pair:D)</pre> </div> </div> <p>Returns a new <code>Pair</code> object with key and value exchanged.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$p</span> <span class="highlite-OPERATOR">=</span> (<span class="highlite-ROUTINE">d</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Raku</span><span class="highlite-STRING_DELIMITER">'</span>).<span class="highlite-ROUTINE">antipair</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">key</span>; <span class="highlite-COMMENT"># OUTPUT: «Raku» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">value</span>; <span class="highlite-COMMENT"># OUTPUT: «d»</span></pre> </div> </div> <h2 id="method_key" class="raku-h2"><a href="#class_Pair" title="go to top of document">method key<a class="raku-anchor" title="direct link" href="#method_key">§</a></a></h2> <!-- defnmark method_key 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">key</span>(Pair:D:)</pre> </div> </div> <p>Returns the <em>key</em> part of the <code>Pair</code>.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$p</span> <span class="highlite-OPERATOR">=</span> (<span class="highlite-TYPE">Raku</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">d</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">key</span>; <span class="highlite-COMMENT"># OUTPUT: «Raku»</span></pre> </div> </div> <h2 id="method_value" class="raku-h2"><a href="#class_Pair" title="go to top of document">method value<a class="raku-anchor" title="direct link" href="#method_value">§</a></a></h2> <!-- defnmark method_value 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">value</span>(Pair:D:) <span class="highlite-KEYWORD">is</span> <span class="highlite-KEYWORD">rw</span></pre> </div> </div> <p>Returns the <em>value</em> part of the <code>Pair</code>.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$p</span> <span class="highlite-OPERATOR">=</span> (<span class="highlite-TYPE">Raku</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">d</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">value</span>; <span class="highlite-COMMENT"># OUTPUT: «d»</span></pre> </div> </div> <h2 id="infix_cmp" class="raku-h2"><a href="#class_Pair" title="go to top of document">infix cmp<a class="raku-anchor" title="direct link" href="#infix_cmp">§</a></a></h2> <!-- defnmark infix_cmp 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> infix:<span class="highlite-STRING_DELIMITER"><</span><span class="highlite-STRING">cmp</span><span class="highlite-STRING_DELIMITER">></span>(Pair:D<span class="highlite-OPERATOR">,</span> Pair:D)</pre> </div> </div> <p>The type-agnostic comparator; compares two <code>Pair</code>s. Compares first their <em>key</em> parts, and then compares the <em>value</em> parts if the keys are equal.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$a</span> <span class="highlite-OPERATOR">=</span> (Apple <span class="highlite-OPERATOR">=></span> 1); <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$b</span> <span class="highlite-OPERATOR">=</span> (Apple <span class="highlite-OPERATOR">=></span> 2); <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$a</span> <span class="highlite-OPERATOR">cmp</span> <span class="highlite-NAME_SCALAR">$b</span>; <span class="highlite-COMMENT"># OUTPUT: «Less»</span></pre> </div> </div> <h2 id="method_fmt" class="raku-h2"><a href="#class_Pair" title="go to top of document">method fmt<a class="raku-anchor" title="direct link" href="#method_fmt">§</a></a></h2> <!-- defnmark method_fmt 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">fmt</span>(Pair:D: Str:D <span class="highlite-NAME_SCALAR">$format</span> <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Takes a <em>format string</em>, and returns a string the <em>key</em> and <em>value</em> parts of the <code>Pair</code> formatted. Here's an example:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$pair</span> <span class="highlite-OPERATOR">=</span> :Earth(1); <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$pair</span>.<span class="highlite-ROUTINE">fmt</span>(<span class="highlite-STRING_DELIMITER">"</span><span class="highlite-NAME_HASH">%s</span><span class="highlite-STRING"> is </span><span class="highlite-NAME_HASH">%.3f</span><span class="highlite-STRING"> AU away from the sun</span><span class="highlite-STRING_DELIMITER">"</span>) <span class="highlite-COMMENT"># OUTPUT: «Earth is 1.000 AU away from the sun»</span></pre> </div> </div> <p>For more about format strings, see <a href="/routine/sprintf">sprintf</a>.</p> <h2 id="method_kv" class="raku-h2"><a href="#class_Pair" title="go to top of document">method kv<a class="raku-anchor" title="direct link" href="#method_kv">§</a></a></h2> <!-- defnmark method_kv 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">kv</span>(Pair:D: <span class="highlite-KEYWORD">--></span> List:D)</pre> </div> </div> <p>Returns a two-element <a href="/type/List"><code>List</code></a> with the <em>key</em> and <em>value</em> parts of <code>Pair</code>, in that order. This method is a special case of the same-named method on <a href="/type/Hash"><code>Hash</code></a>, which returns all its entries as a list of keys and values.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$p</span> <span class="highlite-OPERATOR">=</span> (<span class="highlite-TYPE">Raku</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">d</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">kv</span>[0]; <span class="highlite-COMMENT"># OUTPUT: «Raku» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">kv</span>[1]; <span class="highlite-COMMENT"># OUTPUT: «d»</span></pre> </div> </div> <h2 id="method_pairs" class="raku-h2"><a href="#class_Pair" title="go to top of document">method pairs<a class="raku-anchor" title="direct link" href="#method_pairs">§</a></a></h2> <!-- defnmark method_pairs 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">pairs</span>(Pair:D:)</pre> </div> </div> <p>Returns a list of one <code>Pair</code>, namely this one.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$p</span> <span class="highlite-OPERATOR">=</span> (<span class="highlite-TYPE">Raku</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">d</span><span class="highlite-STRING_DELIMITER">"</span>); <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">pairs</span>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «List» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">pairs</span>[0]; <span class="highlite-COMMENT"># OUTPUT: «Raku => d»</span></pre> </div> </div> <h2 id="method_antipairs" class="raku-h2"><a href="#class_Pair" title="go to top of document">method antipairs<a class="raku-anchor" title="direct link" href="#method_antipairs">§</a></a></h2> <!-- defnmark method_antipairs 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">antipairs</span>(Pair:D:)</pre> </div> </div> <p>Returns a <a href="/type/List"><code>List</code></a> containing the <a href="/type/Pair#method_antipair">antipair</a> of the invocant.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$p</span> <span class="highlite-OPERATOR">=</span> (<span class="highlite-ROUTINE">d</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">Raku</span><span class="highlite-STRING_DELIMITER">'</span>).<span class="highlite-ROUTINE">antipairs</span>; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «List» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">first</span>; <span class="highlite-COMMENT"># OUTPUT: «Raku => d» </span><span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">first</span>.^<span class="highlite-ROUTINE">name</span>; <span class="highlite-COMMENT"># OUTPUT: «Pair»</span></pre> </div> </div> <h2 id="method_invert" class="raku-h2"><a href="#class_Pair" title="go to top of document">method invert<a class="raku-anchor" title="direct link" href="#method_invert">§</a></a></h2> <!-- defnmark method_invert 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">invert</span>(Pair:D: <span class="highlite-KEYWORD">--></span> Seq:D)</pre> </div> </div> <p>Returns a <a href="/type/Seq"><code>Seq</code></a>. If the <code>.value</code> of the invocant is <em>NOT</em> an <a href="/type/Iterable"><code>Iterable</code></a>, the <a href="/type/Seq"><code>Seq</code></a> will contain a single <code>Pair</code> whose <code>.key</code> is the <code>.value</code> of the invocant and whose <code>.value</code> is the <code>.key</code> of the invocant:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">:foo<bar>.<span class="highlite-ROUTINE">invert</span>.<span class="highlite-ROUTINE">raku</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «(:bar("foo"),).Seq»</span></pre> </div> </div> <p>If invocant's <code>.value</code> <em>is</em> an <a href="/type/Iterable"><code>Iterable</code></a>, the returned <a href="/type/Seq"><code>Seq</code></a> will contain the same number of <code>Pair</code>s as items in the <code>.value</code>, with each of those items a <code>.key</code> of a pair and the <code>.key</code> of the invocant the <code>.value</code> of that pair:</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights">:foo<<span class="highlite-TYPE">Raku</span> <span class="highlite-KEYWORD">is</span> great>.<span class="highlite-ROUTINE">invert</span>.<span class="highlite-ROUTINE">raku</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «(:Raku("foo"), :is("foo"), :great("foo")).Seq» </span> :foo{ :42a<span class="highlite-OPERATOR">,</span> :72b }.<span class="highlite-ROUTINE">invert</span>.<span class="highlite-ROUTINE">raku</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «((:a(42)) => "foo", (:b(72)) => "foo").Seq»</span></pre> </div> </div> <p>To perform the exact <code>.key</code> and <code>.value</code> swap, use <a href="/type/Pair#method_antipair"><code>.antipair</code> method</a>.</p> <h2 id="method_keys" class="raku-h2"><a href="#class_Pair" title="go to top of document">method keys<a class="raku-anchor" title="direct link" href="#method_keys">§</a></a></h2> <!-- defnmark method_keys 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">keys</span>(Pair:D: <span class="highlite-KEYWORD">--></span> List:D)</pre> </div> </div> <p>Returns a <a href="/type/List"><code>List</code></a> containing the <a href="/type/Pair#method_key">key</a> of the invocant.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> (<span class="highlite-TYPE">Raku</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">d</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">keys</span>; <span class="highlite-COMMENT"># OUTPUT: «(Raku)»</span></pre> </div> </div> <h2 id="method_values" class="raku-h2"><a href="#class_Pair" title="go to top of document">method values<a class="raku-anchor" title="direct link" href="#method_values">§</a></a></h2> <!-- defnmark method_values 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">values</span>(Pair:D: <span class="highlite-KEYWORD">--></span> List:D)</pre> </div> </div> <p>Returns a <a href="/type/List"><code>List</code></a> containing the <a href="/type/Pair#method_value">value</a> of the invocant.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-ROUTINE">say</span> (<span class="highlite-TYPE">Raku</span> <span class="highlite-OPERATOR">=></span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">d</span><span class="highlite-STRING_DELIMITER">"</span>).<span class="highlite-ROUTINE">values</span>; <span class="highlite-COMMENT"># OUTPUT: «(d)»</span></pre> </div> </div> <h2 id="method_freeze" class="raku-h2"><a href="#class_Pair" title="go to top of document">method freeze<a class="raku-anchor" title="direct link" href="#method_freeze">§</a></a></h2> <!-- defnmark method_freeze 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-ROUTINE">freeze</span>(Pair:D:)</pre> </div> </div> <p>Makes the <em>value</em> of the <code>Pair</code> read-only, by removing it from its <a href="/language/containers#Scalar_containers">Scalar container</a>, and returns it.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$str</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">apple</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$p</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-TYPE">Pair</span>.<span class="highlite-ROUTINE">new</span>(<span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">key</span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> <span class="highlite-NAME_SCALAR">$str</span>); <span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">value</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">orange</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># this works as expected </span><span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «key => orange» </span><span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">freeze</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «orange» </span><span class="highlite-NAME_SCALAR">$p</span>.<span class="highlite-ROUTINE">value</span> <span class="highlite-OPERATOR">=</span> <span class="highlite-STRING_DELIMITER">"</span><span class="highlite-STRING">a new apple</span><span class="highlite-STRING_DELIMITER">"</span>; <span class="highlite-COMMENT"># Fails </span><span class="highlite-KEYWORD">CATCH</span> { <span class="highlite-KEYWORD">default</span> { <span class="highlite-ROUTINE">put</span> .^<span class="highlite-ROUTINE">name</span><span class="highlite-OPERATOR">,</span> <span class="highlite-STRING_DELIMITER">'</span><span class="highlite-STRING">: </span><span class="highlite-STRING_DELIMITER">'</span><span class="highlite-OPERATOR">,</span> .<span class="highlite-TYPE">Str</span> } }; <span class="highlite-COMMENT"># OUTPUT: «X::Assignment::RO: Cannot modify an immutable Str (apple)»</span></pre> </div> </div> <p><strong>NOTE:</strong> this method is deprecated as of <strong>6.d</strong> language version. Instead, create a new <code>Pair</code>, with a <a href="/language/glossary#decont">decontainerized</a> key/value.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-NAME_SCALAR">$p</span>.=<span class="highlite-TYPE">Map</span>.=<span class="highlite-ROUTINE">head</span>.<span class="highlite-ROUTINE">say</span>; <span class="highlite-COMMENT"># OUTPUT: «orange» </span></pre> </div> </div> <h2 id="method_Str" class="raku-h2"><a href="#class_Pair" title="go to top of document">method Str<a class="raku-anchor" title="direct link" href="#method_Str">§</a></a></h2> <!-- defnmark method_Str 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">multi</span> <span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Str</span>(Pair:D: <span class="highlite-KEYWORD">--></span> Str:D)</pre> </div> </div> <p>Returns a string representation of the invocant formatted as <em>key ~ \t ~ value</em>.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$b</span> <span class="highlite-OPERATOR">=</span> eggs <span class="highlite-OPERATOR">=></span> 3; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$b</span>.<span class="highlite-TYPE">Str</span>; <span class="highlite-COMMENT"># OUTPUT: «eggs 3»</span></pre> </div> </div> <h2 id="method_Pair" class="raku-h2"><a href="#class_Pair" title="go to top of document">method Pair<a class="raku-anchor" title="direct link" href="#method_Pair">§</a></a></h2> <!-- defnmark method_Pair 2 --> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">method</span> <span class="highlite-TYPE">Pair</span>()</pre> </div> </div> <p>Returns the invocant <code>Pair</code> object.</p> <div class="raku-code raku-lang"> <button class="copy-code" title="Copy code"><i class="far fa-clipboard"></i></button> <label>Raku highlighting</label> <div> <pre class="nohighlights"><span class="highlite-KEYWORD">my</span> <span class="highlite-NAME_SCALAR">$pair</span> <span class="highlite-OPERATOR">=</span> eggs <span class="highlite-OPERATOR">=></span> 3; <span class="highlite-ROUTINE">say</span> <span class="highlite-NAME_SCALAR">$pair</span>.<span class="highlite-TYPE">Pair</span> <span class="highlite-OPERATOR">===</span> <span class="highlite-NAME_SCALAR">$pair</span>; <span class="highlite-COMMENT"># OUTPUT: «True»</span></pre> </div> </div> <h1 id="typegraphrelations" class="raku-h1"><a href="#" title="go to top of document">Typegraph<a class="raku-anchor" title="direct link" href="#typegraphrelations">§</a></a></h1> <figure class="typegraph" > <figcaption>Type relations for <code>Pair</code></figcaption> <svg width="206pt" height="188pt" viewBox="0.00 0.00 206.34 188.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 184)"> <title>raku-type-graph</title> <polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-184 202.34,-184 202.34,4 -4,4"/> <!-- Pair --> <g id="node1" class="node"> <title>Pair</title> <g id="a_node1"><a xlink:href="/type/Pair" xlink:title="Pair"> <ellipse fill="none" stroke="#000000" cx="82.6" cy="-18" rx="27.1" ry="18"/> <text text-anchor="middle" x="82.6" y="-14.3" font-family="FreeSans" font-size="14.00" fill="#000000">Pair</text> </a> </g> </g> <!-- Any --> <g id="node3" class="node"> <title>Any</title> <g id="a_node3"><a xlink:href="/type/Any" xlink:title="Any"> <ellipse fill="none" stroke="#000000" cx="28.6" cy="-90" rx="28.7" ry="18"/> <text text-anchor="middle" x="28.6" y="-86.3" font-family="FreeSans" font-size="14.00" fill="#000000">Any</text> </a> </g> </g> <!-- Pair->Any --> <g id="edge1" class="edge"> <title>Pair->Any</title> <path fill="none" stroke="#000000" d="M70.61,-34.54C63.62,-43.6 54.66,-55.21 46.81,-65.39"/> <polygon fill="#000000" stroke="#000000" points="43.89,-63.45 40.55,-73.51 49.43,-67.73 43.89,-63.45"/> </g> <!-- Associative --> <g id="node4" class="node"> <title>Associative</title> <g id="a_node4"><a xlink:href="/type/Associative" xlink:title="Associative"> <ellipse fill="none" stroke="#6666ff" cx="136.6" cy="-90" rx="61.99" ry="18"/> <text text-anchor="middle" x="136.6" y="-86.3" font-family="FreeSans" font-size="14.00" fill="#6666ff">Associative</text> </a> </g> </g> <!-- Pair->Associative --> <g id="edge3" class="edge"> <title>Pair->Associative</title> <path fill="none" stroke="#6666ff" d="M94.58,-34.54C101.28,-43.22 109.79,-54.25 117.4,-64.11"/> <polygon fill="#6666ff" stroke="#6666ff" points="114.63,-66.26 123.51,-72.04 120.18,-61.98 114.63,-66.26"/> </g> <!-- Mu --> <g id="node2" class="node"> <title>Mu</title> <g id="a_node2"><a xlink:href="/type/Mu" xlink:title="Mu"> <ellipse fill="none" stroke="#000000" cx="28.6" cy="-162" rx="27" ry="18"/> <text text-anchor="middle" x="28.6" y="-158.3" font-family="FreeSans" font-size="14.00" fill="#000000">Mu</text> </a> </g> </g> <!-- Any->Mu --> <g id="edge2" class="edge"> <title>Any->Mu</title> <path fill="none" stroke="#000000" d="M28.6,-108.3C28.6,-116.02 28.6,-125.29 28.6,-133.89"/> <polygon fill="#000000" stroke="#000000" points="25.1,-133.9 28.6,-143.9 32.1,-133.9 25.1,-133.9"/> </g> </g> </svg> <p class="fallback"> <a rel="alternate" href="/assets/typegraphs/Pair.svg"> Expand chart above </a></p> </figure> </div></div></section> </div> </div> </div> <footer class="footer main-footer"> <div class="container px-4"> <nav class="level"> <div class="level-left"> <div class="level-item"> <a href="/about">About</a> </div> <div class="level-item"> <a id="toggle-theme">Toggle theme</a> </div> <div class="level-item" title="414dd1bac 2024-07-13"> <a>Commit</a> </div> </div> <div class="level-right"> <div class="level-item"> <a href="/license">License</a> </div> </div> </nav> </div> </footer> </body> </html>