def understand(methodname, arity = nil, block_expected = false)
      m = Message.new(self, methodname.to_s, arity, block_expected)
      @descriptor.add_message(m)
      self
    end
def understand(methodname, arity = nil, block_expected = false)
      m = Message.new(self, methodname.to_s, arity, block_expected)
      @descriptor.add_message(m)
      self
    end
This method defines one of the messages, the protocol in question
 consists of: The messages which the class, that conforms to this
 protocol, should understand and respond to. An example shows best
 which +message+descriptions_ are allowed:

  MyProtocol = Protocol do
    understand :bar            # conforming class must respond to :bar
    understand :baz, 3         # c. c. must respond to :baz with 3 args.
    understand :foo, -1        # c. c. must respond to :foo, any number of args.
    understand :quux, 0, true  # c. c. must respond to :quux, no args + block.
    understand :quux1, 1, true # c. c. must respond to :quux, 1 arg + block.
  end