Преглед на файлове

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 години
родител
ревизия
1e9288fda1
променени са 1 файла, в които са добавени 74 реда и са изтрити 1 реда
  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){
 function showVars(avar, prefix=null){
 	local isClass = type(avar) == "class";
 	local isClass = type(avar) == "class";
 	local isTable = type(avar) == "table";
 	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) {
 	foreach(k,v in avar) {
 		if(isClass || isTable){
 		if(isClass || isTable){
 			if(avar.rawin(k)) myvars.push([k,v]);
 			if(avar.rawin(k)) myvars.push([k,v]);
@@ -17,3 +54,39 @@ function showVars(avar, prefix=null){
 	}
 	}
 }
 }
 showVars(this);
 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();
+*/