/// <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);
        }
        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);
        }