public function replace($object, $root = null)
{
if ($root === null) {
$root = $object;
}
$resolver = $this->resolver;
$replacer = $this;
$replace = \Closure::bind(function () use($resolver, $object, $replacer, $root) {
foreach ($this as &$value) {
if ($value instanceof Reference) {
$value = $resolver->resolve($value, $root);
} elseif (is_object($value)) {
$replacer->replace($value, $root);
}
}
}, $object, $object);
$replace();
}