# Method `->()

Method `->

  `mixed `->(object arg, string index)`
  `mixed `->(int arg, string index)`
  `mixed `->(array arg, string index)`
  `mixed `->(mapping arg, string index)`
  `bool `->(multiset arg, string index)`
  `mixed `->(program arg, string index)`

Description

  Arrow indexing.

  Every non-lvalue expression with the `->` operator becomes a call to this function. `a->b` is the same as `predef::`^(a,"b")` where `"b"` is the symbol `b` in string form.

  This function behaves like `[], except that the index is passed literally as a string instead of being evaluated.

Returns

  If arg is an object that implements lfun::`->(), that function will be called with index as the single argument.

  Otherwise the result will be as follows:

  `arg` can have any of the following types:

  `object` | The non-protected (ie public) symbol named index will be looked up in arg.
  `int` | The bignum function named index will be looked up in arg.
  `array` | An array of all elements in arg arrow indexed with index will be returned.
  `mapping` | If index exists in arg the corresponding value will be returned. Otherwise `UNDEFINED` will be returned.
  `multiset` | If index exists in arg, `1` will be returned. Otherwise `UNDEFINED` will be returned.
  `program` | The non-protected (ie public) constant symbol index will be looked up in arg.

Note

  In an expression `a->b`, the symbol `b` can be any token that matches the identifier syntax - keywords are disregarded in that context.

Note

  An arrow indexing expression in an lvalue context, i.e. where the index is being assigned a new value, uses `->= instead of this function.

See also

  `[](), lfun::`->(), ::`->(), `->=