Uploaded image for project: 'Clojure'
  1. CLJ-1368

Document usage for case with non-readable constants

    Details

    • Type: Improvement
    • Status: Reopened
    • Priority: Minor
    • Resolution: Unresolved
    • Affects versions: None
    • Fix versions: None
    • Labels:

      Description

      Problem

      It is pretty obscure how to get constant-time dispatch for e.g. Enums, even if user knows about case.

      Proposal

      The possibility to dispatch to arbitrary constants with case, by wrapper macro, should be documented.

      Wording

      • Should it warn against doing that with unstable values?
      • Should it mention anything else than java Enums?

      Case Techniques

      Case is documented for accepting all readable forms as test-constants. However, it can also be made to use any compile-time-known constants as test-constants, by wrapping it in another macro.

      Sometimes this is appropriate, e.g. when dispatching on a java Enum.
      Other times, less so, e.g. when dispatching on objects whose hash changes when the vm is restarted (breaks AOT).

      Implications

      This technique is an application of a more general technique: Passing non-literals to a macro from another macro.
      Are there other macros that have use cases like this?

      References

      https://groups.google.com/d/topic/clojure/3yGjDO2YnjQ/discussion

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              bendlas Herwig Hochleitner
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated: