Enumerations.xhtml 5.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg">
  3. <head>
  4. <title>Enumeration types</title>
  5. <link rel="stylesheet" type="text/css" href="docbook-epub.css"/>
  6. <link rel="stylesheet" type="text/css" href="kawa.css"/>
  7. <script src="kawa-ebook.js" type="text/javascript"/>
  8. <meta name="generator" content="DocBook XSL-NS Stylesheets V1.79.1"/>
  9. <link rel="prev" href="Overall-Index.xhtml" title="Index"/>
  10. <link rel="next" href="Annotations.xhtml" title="Annotations of declarations"/>
  11. </head>
  12. <body>
  13. <header/>
  14. <section class="sect1" title="Enumeration types" epub:type="subchapter" id="Enumerations">
  15. <div class="titlepage">
  16. <div>
  17. <div>
  18. <h2 class="title" style="clear: both">Enumeration types</h2>
  19. </div>
  20. </div>
  21. </div>
  22. <p>An enumeration type is a set of named atomic enumeration values
  23. that are distinct from other values. You define the type
  24. using <code class="literal">define-enum</code>, and you reference enumeration values
  25. using colon notation:
  26. </p>
  27. <pre class="screen">(define-enum colors (red blue green))
  28. (define favorite-color colors:green)
  29. </pre>
  30. <p>Displaying an enum just prints the enum name,
  31. but readable output using <code class="literal">write</code> (or the <code class="literal">~s</code> <code class="literal">format</code>
  32. specifier) prepends the type name:
  33. </p>
  34. <pre class="screen">(format "~a" favorite-color) ⇒ "green"
  35. (format "~s" favorite-color) ⇒ "colors:green"
  36. </pre>
  37. <p>The static <code class="literal">values</code> method returns a Java array of the enumeration
  38. values, in declaration order, while <code class="literal">ordinal</code> yields the index
  39. of an enumeration value:
  40. </p>
  41. <pre class="screen">(colors:values) ⇒ [red blue green]
  42. ((colors:values) 1) ⇒ blue
  43. (favorite-color:ordinal) ⇒ 2
  44. </pre>
  45. <p>If you invoke the enumeration type as a function,
  46. it will map the name (as a string) to the corresponding value.
  47. (This uses the <code class="literal">valueOf</code> method.)
  48. </p>
  49. <pre class="screen">(colors "red") ⇒ red
  50. (colors "RED") ⇒ throws IllegalArgumentException
  51. (eq? favorite-color (colors:valueOf "green")) ⇒ #t
  52. </pre>
  53. <p>Kawa enumerations are based on Java enumerations.
  54. Thus the above is similar to a Java5 <code class="literal">enum</code> declaration,
  55. and the type <code class="literal">colors</code> above extends <code class="literal">java.lang.Enum</code>.
  56. </p>
  57. <p class="synopsis" kind="Syntax"><span class="kind">Syntax</span><span class="ignore">: </span><a id="idm139667871660096" class="indexterm"/> <code class="function">define-enum</code> <em class="replaceable"><code>enum-type-name</code></em> <em class="replaceable"><code><em class="replaceable"><code>option-pair</code></em></code></em><em class="replaceable"><code>...</code></em> <em class="replaceable"><code><span class="bold"><strong>(</strong></span></code></em><em class="replaceable"><code>enum-value-name</code></em> <em class="replaceable"><code>...</code></em><em class="replaceable"><code><span class="bold"><strong>)</strong></span></code></em> <em class="replaceable"><code><em class="replaceable"><code>field-or-method-decl</code></em></code></em><em class="replaceable"><code>...</code></em></p>
  58. <div class="blockquote">
  59. <blockquote class="blockquote">
  60. <p>This declares a new enumeration type <em class="replaceable"><code>enum-type-name</code></em>,
  61. whose enumerations values are the <em class="replaceable"><code>enum-value-name</code></em> list.
  62. You can specify extra options and members using
  63. <em class="replaceable"><code>option-pair</code></em> and <em class="replaceable"><code>field-or-method-decl</code></em>,
  64. which are as in <code class="literal">define-simple-class</code>.
  65. (The <em class="replaceable"><code>define-enum</code></em> syntax is similar to a
  66. <code class="literal">define-simple-class</code> that extends <code class="literal">java.lang.Enum</code>.)
  67. </p>
  68. </blockquote>
  69. </div>
  70. <p>(Note that R6RS has a separate Enumerations library <code class="literal">(rnrs enum)</code>.
  71. Unfortunately, this is not compatible with standard Java enums.
  72. R6RS enums are simple symbols, which means you cannot distinguish
  73. two enum values from different enumeration types if they have the
  74. same value, nor from a vanilla symbol. That makes them less useful.)
  75. </p>
  76. </section>
  77. <footer>
  78. <div class="navfooter">
  79. <p>
  80. Up: <a accesskey="u" href="Objects-Classes-and-Modules.xhtml">Object, Classes and Modules</a></p>
  81. <p>
  82. Previous: <a accesskey="p" href="Anonymous-classes.xhtml">Anonymous classes</a></p>
  83. <p>
  84. Next: <a accesskey="n" href="Annotations.xhtml">Annotations of declarations</a></p>
  85. </div>
  86. </footer>
  87. </body>
  88. </html>