.. index:: pair: ::/1; Control construct
::Message
Sends a message to :term:`self`. Can only used in the body of a predicate definition. The argument should match a :ref:`public <directives_public_1>` or :ref:`protected <directives_protected_1>` predicate of self. It may also match a :ref:`private <directives_private_1>` predicate if the predicate is within the scope of the object where the method making the call is defined, if imported from a category, if used from within a category, or when using private inheritance. When the predicate is declared but not defined, the message simply fails (as per the :term:`closed-world assumption`).
The lookups for the message declaration and the corresponding method are performed using a depth-first strategy. A message to self necessarily implies the use of :term:`dynamic binding` but a caching mechanism is used to improve performance in subsequent messages. See the User Manual section on :ref:`performance <performance_performance>` for details.
::+callable - zero_or_more
instantiation_error
type_error(callable, Message)
permission_error(access, private_predicate, Name/Arity)
existence_error(predicate_declaration, Name/Arity)
area(Area) :-
::width(Width),
::height(Height),
Area is Width * Height.
.. seealso::
:ref:`control_send_to_object_2`,
:ref:`control_call_super_1`,
:ref:`control_delegate_message_1`