public LuaValue(LuaFloat value) : this() { _numValue = value; _objValue = null; _boolValue = false; Type = ELuaType.Float; }
public LuaValue(object value, ELuaType type) : this() { _objValue = value; _boolValue = false; _numValue = 0; Type = type; }
public LuaValue(bool value) : this() { _boolValue = value; _numValue = 0; _objValue = null; Type = ELuaType.Boolean; }
private LuaValue(object value) : this() { _numValue = 0; _boolValue = false; _objValue = null; if (value is LuaInt l) { _numValue = l; Type = ELuaType.Int; } else if (value is LuaFloat f) { _numValue = f; Type = ELuaType.Float; } else if (value is string) { _objValue = value; Type = ELuaType.String; } else if (value is LuaTable) { _objValue = value; Type = ELuaType.Table; } else if (value is Closure c) { Type = c.CSFunction != null ? ELuaType.CSFunction : ELuaType.Closure; _objValue = c; } else if (value is LuaState) { _objValue = value; Type = ELuaType.Thread; } else { _objValue = value; Type = ELuaType.LightUserData; } }
/// <summary> /// 把给定Lua类型转换成对应的字符串表示 /// </summary> public string TypeName(ELuaType tp) { switch (tp) { case ELuaType.None: return("no value"); case ELuaType.Nil: return("nil"); case ELuaType.Boolean: return("boolean"); case ELuaType.Number: return("number"); case ELuaType.Int: return("integer"); case ELuaType.String: return("string"); case ELuaType.Table: return("table"); case ELuaType.Function: return("function"); case ELuaType.CSFunction: return("csfunction"); case ELuaType.Thread: return("thread"); default: return("userdata"); } }
public LuaValue() { Type = ELuaType.None; }
public static bool IsUserdata(this ELuaType type) { return(type == ELuaType.UserData || type == ELuaType.LightUserData); }
public static bool IsFunction(this ELuaType type) { return(type.GetParentType() == ELuaType.Function); }
public static bool IsNumber(this ELuaType type) { return(type.GetParentType() == ELuaType.Number); }
public static ELuaType GetParentType(this ELuaType type) { return((ELuaType)((int)type & 0b1111)); }