internal ScriptObject GetOrCreateFileld(ScriptObject index) { Contract.Assert(Type == ValueType.TABLE); TablePart table = Value.RefPartHandle.ConverToTablePart(); ScriptObject s = null; switch (index.Type) { case ValueType.NUMBER: int at = (int)index.Value.Number; s = Value.RefPartHandle.ConverToTablePart().IndexAt(at); if (s == null) { s = ScriptObject.CreateNil(); } table.AddFileld(at, s); break; case ValueType.STRING: string key = index.Value.RefPartHandle.ConverToStringPart().Value; s = table.TryGetValue(key); if (s == null) { s = ScriptObject.CreateNil(); } table.AddFileld(key, s); break; default: Contract.Assert(false); break; } return(s); }
/// <summary> /// 获取字段,没有的话就产生一个nil /// </summary> /// <param name="filed"></param> /// <returns></returns> public ScriptObject GetOrCreateFileld(string filed) { Contract.Assert(Type == ValueType.TABLE); TablePart table = Value.RefPartHandle.ConverToTablePart(); ScriptObject s = table.TryGetValue(filed); if (s == null) { s = ScriptObject.CreateNil(); table.AddFileld(filed, s); } return(s); }