public void Assign(string name, object value) { if (name.StartsWith("$") && !IsGlobal) { global.Assign(name, value); } else if (members.ContainsKey(name)) { this[name] = value; } else if (parent != null) { parent.Assign(name, value); } else if (name.StartsWith("$")) { members[name] = value; } else { throw ErrorFactory.CreateNotDefinedError(name); } }