# Method Serializer.Serializable()->_deserialize_variable()

Method _deserialize_variable

  ``protected` `void` _deserialize_variable(`function`(`function`(`mixed`:`void`), `string`, `type`:`void`) `deserializer`, `function`(`mixed`:`void`) `setter`, `string` `symbol`, `type` `symbol_type`)`

Description

  Default deserialization function for variables.

Parameter `deserializer`

  Function to be called in turn.

Parameter `setter`

  Function that sets the value of the variable.

Parameter `symbol`

  Variable name.

Parameter `symbol_type`

  Type of the variable.

  This function is typically called from _deserialize(), and does something like:

      if (object_typep(symbol_type)) {
            program p = program_from_type(symbol_type);
            if (p && !needs_parent(p) && is_deserializable(p)) {
              object value = p();
              setter(value);
              Serializer.deserialize(value, deserializer);
              return;
            }
          }
          deserializer(setter, symbol, symbol_type);

Note

  The above takes care of the most common cases, but

  - Does not support anonymous object types.

  - Does not support objects needing a parent.

  - Does not support non-serializable objects.

  - Selects one of the object types in case of a complex `symbol_type`. The selected type is NOT deterministic in case there are multiple choices that satisfy the above.

  - Is likely to throw errors if `p()` requires arguments.

  These issues can all be solved by overloading this function.

See also

  _deserialize(), _serialize_variable(), Builtin.Setter