# Method `->=()

Method `->=

  ``mixed` `->=(`object` `arg`, `string` `index`, `mixed` `val`)`
  ``mixed` `->=(`mapping` `arg`, `string` `index`, `mixed` `val`)`
  ``bool` `->=(`multiset` `arg`, `string` `index`, `bool` `val`)`

Description

  Arrow index assignment.

  Every lvalue expression with the `->` operator becomes a call to this function, i.e. `a->b=c` is the same as `predef::`->=(a,"b",c)` 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.

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

  `arg` can have any of the following types:

  ``object`` | The non-protected (ie public) variable named `index` will be looked up in `arg`, and assigned `val`.
  ``array`|`mapping`` | Index `index` in `arg` will be assigned `val`.
  ``multiset`` | If `val` is `0` (zero), one occurrance of `index` in `arg` will be removed. Otherwise `index` will be added to `arg` if it is not already there.

Returns

  `val` will be returned.

Note

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

Note

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

See also

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