public override ScriptObject GetValue(object key) { if (this.metaTable == null) { return(m_listObject.ContainsKey(key) ? m_listObject[key] : m_Script.Null); } else { if (m_listObject.ContainsKey(key)) { return(m_listObject[key]); } ScriptObject idx_obj = this.metaTable.GetValue(ScorpioMetaMethod.INDEX); if (idx_obj == null) { return(m_Script.Null); } if (idx_obj.IsFunction) { ScriptObject[] paramsArr = { this, m_Script.CreateObject(key) }; return(m_Script.CreateObject(idx_obj.Call(paramsArr))); } else if (idx_obj.IsTable) { return(idx_obj.GetValue(key)); } else { return(m_Script.Null); } } }
public object Call(String strName, ScriptObject[] args) { ScriptObject obj = m_GlobalTable.GetValue(strName); if (obj is ScriptNull) { throw new ScriptException("找不到变量[" + strName + "]"); } m_StackInfoStack.Clear(); return(obj.Call(args)); }
//调用函数 public ScriptValue Call(ScriptValue thisObject, ScriptValue[] parameters, int length) { if (valueType == scriptValueType) { return(scriptValue.Call(thisObject, parameters, length)); } else { throw new ExecutionException($"类型[{ValueTypeName}]不支持函数调用"); } }
public object Call(String strName, params object[] args) { ScriptObject obj = m_GlobalTable.GetValue(strName); if (obj is ScriptNull) { throw new ScriptException("找不到变量[" + strName + "]"); } int length = args.Length; ScriptObject[] parameters = new ScriptObject[length]; for (int i = 0; i < length; ++i) { parameters[i] = CreateObject(args[i]); } m_StackInfoStack.Clear(); return(obj.Call(parameters)); }
public override void SetValue(object key, ScriptObject value) { if (value is ScriptNull) { m_listObject.Remove(key); } else { if (this.metaTable == null) { m_listObject[key] = value.Assign(); } else { if (m_listObject.ContainsKey(key)) { m_listObject[key] = value.Assign(); } else { ScriptObject idx_obj = this.metaTable.GetValue(ScorpioMetaMethod.NEWINDEX); if (idx_obj == null) { m_listObject[key] = value.Assign(); return; } if (idx_obj.IsFunction) { ScriptObject[] paramsArr = { this, m_Script.CreateObject(key), value }; m_Script.CreateObject(idx_obj.Call(paramsArr)); } else if (idx_obj.IsTable) { idx_obj.SetValue(key, value); } } } } }