A record asking for its operators with default operator

The complete source of forAI_record_default_operators.ek9, compiled by the EK9 compiler. Shown on forAI.html.

#!ek9
defines module site.forAI.recordoperators

  defines record
    Customer
      name as String: String()
      email as String: String()

      default operator $     //field-by-field toString
      default operator $$    //field-by-field JSON
      default operator #?    //field-by-field hashCode
      default operator ?     //all-fields isSet
      default operator <=>   //field-by-field comparison; == <> < <= > >= are generated from it
      default operator :=:   //shallow copy: each field refers to the source's object

  defines program

    CustomerOperators()
      stdout <- Stdout()
      ada <- Customer()
      ada.name: "Ada"
      ada.email: "ada@example.com"
      copy <- Customer()
      copy :=: ada

      stdout.println($ada)
      stdout.println($$ada)
      stdout.println($ ada?)
      stdout.println($ (copy == ada))
      stdout.println($ (ada < copy))

Download forAI_record_default_operators.ek9

Output

Customer(name=Ada, email=ada@example.com)
{"name":"Ada","email":"ada@example.com"}
true
true
false