Przeglądaj źródła

Modified this example to show only class methods defined on the actual class and use the new "gettypetag" script function to show the base class.

mingodad 13 lat temu
rodzic
commit
1e9288fda1
1 zmienionych plików z 74 dodań i 1 usunięć
  1. 74 1
      samples/show-vars.nut

+ 74 - 1
samples/show-vars.nut

@@ -1,7 +1,44 @@
+function getMembersNotInBaseClass(klass, klass_members){
+	local bklass = klass.getbase();
+	local bklass_members = {};
+	if(bklass) foreach(k,v in bklass) bklass_members[k] <- true;
+	foreach(k,v in klass) {
+		if(bklass_members.get(k, klass) == klass) { //not found
+			klass_members.push([k,v]);
+		}
+	}
+	klass_members.push([" [base class] -> ", gettypetag(bklass)]);
+}
+
 function showVars(avar, prefix=null){
 	local isClass = type(avar) == "class";
 	local isTable = type(avar) == "table";
-	local myvars = [];
+	local  myvars=[];
+	if(isClass) getMembersNotInBaseClass(avar, myvars);
+	else 
+	{
+		foreach(k,v in avar) {
+			if(isTable || isClass){
+				if(avar.rawin(k)) myvars.push([k,v]);
+			}
+			else myvars.push([k,v]);
+		}
+	}
+	myvars.sort(@(a,b) a[0] <=> b[0]);
+	foreach(v in myvars) {
+		if(prefix) print1(prefix);
+		print(v[0], type(v[1]), v[1]);
+		local vtype = type(v[1]);
+		if(vtype == "class" || vtype == "table") showVars(v[1], prefix ? prefix + "\t" : "\t");
+	}
+}
+showVars(this);
+/*
+//bug in passing array as default parameter ??????
+function showVars(avar, prefix=null, myvars=[]){
+	local isClass = type(avar) == "class";
+	local isTable = type(avar) == "table";
+	//local  myvars=[];
 	foreach(k,v in avar) {
 		if(isClass || isTable){
 			if(avar.rawin(k)) myvars.push([k,v]);
@@ -17,3 +54,39 @@ function showVars(avar, prefix=null){
 	}
 }
 showVars(this);
+
+function hideFromGlobals(){
+	//class A {};
+	//local instA = A();
+	//local weakv = instA.weakref();
+	local intv = 2;
+	local tblv = {};
+	local arrayv = [];
+	local str = "";
+	local coro = ::newthread(showVars);
+	local function geny(n){
+		for(local i=0;i<n;i+=1)
+		yield i;
+		return null;
+	}
+	local gtor=geny(10);
+
+
+	local myvars = [
+			//["array_delegate", arrayv.getdelegate()],
+			//["class_delegate", A.getdelegate()],
+			//["instance_delegate", instA.getdelegate()],
+			//["closure_delegate", showVars.getdelegate()],
+			//["generator_delegate", gtor.getdelegate()],
+			//["number_delegate", intv.getdelegate()],
+			//["float_delegate", floatv.getdelegate()],
+			//["string_delegate", str.getdelegate()],
+			//["table_delegate", tblv.getdelegate()],
+			//["thread_delegate", coro.getdelegate()],
+			//["weakref_delegate", weakv.getdelegate()],
+		];
+
+	showVars(this);
+}
+hideFromGlobals();
+*/