In addition to codice_27, the usual constructor to create new objects, it has two methods: one to override the codice_28 comparison operator (so codice_29 can sort by age) and the other to override the codice_30 method (so codice_31 can format its output). Here, codice_12 is an example of metaprogramming in Ruby: codice_33 defines getter and setter methods of instance variables, but codice_12 only getter methods. The last evaluated statement in a method is its return value, allowing the omission of an explicit codice_35 statement. class Person end  group = [  puts group.sort.reverse The preceding code prints three names in reverse age order: Bob (33) Ash (23) Chris (16) codice_26 is a constant and is a reference to a codice_37 object. In Ruby, classes are never closed: methods can always be added to an existing class. This applies to "all" classes, including the standard, built-in classes. All that is needed to do is open up a class definition for an existing class, and the new contents specified will be added to the existing contents. A simple example of adding a new method to the standard library's codice_38 class: class Time end  today = Time.now # => 2013-09-03 16:09:37 +0300 yesterday = today.yesterday # => 2013-09-02 16:09:37 +0300 Adding methods to previously defined classes is often called [[monkey patch|monkey-patching]]. If performed recklessly, the practice can lead to both behavior collisions with subsequent unexpected results and code scalability problems. Since Ruby 2.0 it has been possible to use refinements to reduce the potentially negative consequences of monkey-patching, by limiting the scope of the patch to particular areas of the code base. module RelativeTimeExtensions end  module MyModule  end An exception is raised with a codice_39 call: raise An optional message can be added to the exception: raise "This is a message" Exceptions can also be specified by the programmer: raise ArgumentError, "Illegal arguments!" Alternatively, an exception instance can be passed to the codice_39 method: raise ArgumentError.new("Illegal arguments!") This last construct is useful when raising an instance of a custom exception class featuring a constructor that takes more than one argument: class ParseError < Exception end  raise ParseError.new("Foo", 3, 9) Exceptions are handled by the codice_41 clause.