The following code defines a class named Person. In addition to ‘initialize’, the usual constructor to create new objects, it has two methods: one to override the <=> comparison operator (so Array#sort can sort by age) and the other to override the to_s method (so Kernel#puts can format its output). Here, “attr_reader” is an example of metaprogramming in Ruby: “attr_accessor” defines getter and setter methods of instance variables, “attr_reader” only getter methods. Also, the last evaluated statement in a method is its return value, allowing the omission of an explicit ‘return’.