You are on page 1of 10

Ring Documentation, Release 1.5.

Example:
f1 = func { see "hello" + nl }

f2 = func { see "how are you?" + nl }

f3 = f1

call f1()
call f2()
call f3()

see (f1 = f2) + nl


see (f2 = f3) + nl
see (f1 = f3) + nl

Output:
hello
how are you?
hello
0
0
1

40.5. Equality of functions 285


CHAPTER

FORTYONE

REFLECTION AND META-PROGRAMMING

Since the Ring programming language is a dynamic language, we can get answers about the program code and we can
modify our code during the runtime.
In this chapter we will learn about this and the available functions to use.

41.1 locals() Function

We can get a list of variables names in the current scope using the locals() function.
Syntax:
locals() --> a list contains the variables names in the current scope

Example:
test("hello")

func test cMsg

see cMsg + nl

x = 10
y = 20
z = 30

see locals()

Output:
hello
cmsg
x
y
z

41.2 globals() Function

We can get a list of variables names in the global scope using the globals() function.
Syntax:

286
Ring Documentation, Release 1.5.3

globals() --> a list contains variables names in the global scope

Example:
x=10 y=20 z=30
test()

func test
see "message from test()" + nl +
"Global Variables:" + nl
see globals()

Output:
message from test()
Global Variables:
x
y
z

41.3 functions() Function

We can get a list of functions names written in the Ring language using the functions() function.
Syntax:
functions() --> a list contains functions names

Example:
see functions()

func f1
see "f1" + nl

func f2
see "f2" + nl

func f3
see "f3" + nl

Output:
f1
f2
f3

41.4 cfunctions() Function

We can get a list of functions names written in the C language using the cfunctions() function.
Syntax:
cfunctions() --> a list contains functions names

Example:

41.3. functions() Function 287


Ring Documentation, Release 1.5.3

aList = cfunctions()
See "Count : " + len(aList) + nl
for x in aList
see x + "()" + nl
next

Output:
Count : 197
len()
add()
del()
get()
clock()
...

Note: The complete list is removed from the previous output.

41.5 islocal() Function

We can check if a variable is defined in the local scope or not using the islocal() function.
Syntax:
islocal(cVariableName) --> returns 1 if the variable is defined in the local scope
returns 0 if the variable is not defined in the local scope

Example:
test()

func test
x=10 y=20
see islocal("x") + nl +
islocal("y") + nl +
islocal("z") + nl

Output:
1
1
0

41.6 isglobal() Function

We can check if a variable is defined in the global scope or not using the isglobal() function.
Syntax:
isglobal(cVariableName) --> returns 1 if the variable is defined in the global scope
returns 0 if the variable is not defined in the global scope

Example:

41.5. islocal() Function 288


Ring Documentation, Release 1.5.3

x=10 y=20

test()

func test
see isglobal("x") + nl +
isglobal("y") + nl +
isglobal("z") + nl

Output:
1
1
0

41.7 isfunction() Function

We can check if a Ring function is defined or not using the isfunction() function.
Syntax:
isfunction(cFunctionName) --> returns 1 if the Ring function is defined
returns 0 if the Ring function is not defined

Example:
see isfunction("f1") + nl +
isfunction("f2") + nl +
isfunction("f3") + nl

func f1
see "message from f1()" + nl

func f2
see "message from f2()" + nl

Output:
1
1
0

41.8 iscfunction() Function

We can check if a C function is defined or not using the iscfunction() function.


Syntax:
iscfunction(cFunctionName) --> returns 1 if the C function is defined
returns 0 if the C function is not defined

Example:
see iscfunction("len") + nl +
iscfunction("add") + nl +
iscfunction("test") + nl

41.7. isfunction() Function 289


Ring Documentation, Release 1.5.3

Output:
1
1
0

41.9 packages() Function

We can get a list of packages names using the packages() function.


Syntax:
packages() --> a list contains packages names

Example:
See packages()

Package Package1
Class class1
Func f1

Package Package2
Class class1
Func f1

Package Package3
Class class1
Func f1

Package Package4
Class class1
Func f1

Output:
package1
package2
package3
package4

41.10 ispackage() Function

We can check if a package is defined or not using the ispackage() function.


Syntax:
ispackage(cPackageName) --> returns 1 if the Package is defined
returns 0 if the Package is not defined

Example:
See ispackage("package1") + nl +
ispackage("package4") + nl +
ispackage("package5") + nl +
ispackage("package3") + nl

41.9. packages() Function 290


Ring Documentation, Release 1.5.3

Package Package1
Class class1
Func f1

Package Package2
Class class1
Func f1

Package Package3
Class class1
Func f1

Package Package4
Class class1
Func f1

Output:
1
1
0
1

41.11 classes() Function

We can get a list of classes names using the classes() function.


Syntax:
classes() --> a list contains classes names

Example:
See classes()

Class class1
Func f1

Class class2
Func f1

Class class3
Func f1

Output:
class1
class2
class3

41.12 isclass() Function

We can check if a class is defined or not using the isclass() function.


Syntax:

41.11. classes() Function 291


Ring Documentation, Release 1.5.3

isclass(cClassName) --> returns 1 if the Class is defined


returns 0 if the Class is not defined

Example:
see isclass("class4") + nl +
isclass("class3") + nl +
isclass("class2") + nl

Class class1
func f1

class class2
func f1

class class3
func f1

Output:
0
1
1

41.13 packageclasses() Function

We can get a list of classes names inside a package using the packageclasses() function.
Syntax:
packageclasses(cPackageName) --> a list contains classes names inside the package

Example:
see "classes in Package1" + nl
see packageclasses("Package1")
see "classes in Package2" + nl
see packageclasses("Package2")

Package Package1
Class class1
Func f1

Package Package2
Class class1
Func f1
Class class2
Func f1
Class class3
func f1

Output:
classes in Package1
class1
classes in Package2
class1

41.13. packageclasses() Function 292


Ring Documentation, Release 1.5.3

class2
class3

41.14 ispackageclass() Function

We can check if a class is defined inside package or not using the ispackageclass() function.
Syntax:
ispackageclass(cPackageName,cClassName) --> returns 1 if the Class is defined
returns 0 if the Class is not defined

Example:
see ispackageclass("package1","class1") + nl +
ispackageclass("package1","class2") + nl +
ispackageclass("package2","class1") + nl +
ispackageclass("package2","class2") + nl

Package Package1
Class class1
Func f1

Package Package2
Class class1
Func f1
Class class2
Func f1
Class class3
func f1

Output:
1
0
1
1

41.15 classname() Function

We can know the class name of an object using the classname() function
Syntax:
classname(object) --> Returns the object class name

Example:
o1 = new point
o2 = new rect

see classname(o1) + nl # print point


see classname(o2) + nl # print rect

class point
class rect

41.14. ispackageclass() Function 293


Ring Documentation, Release 1.5.3

41.16 objectid() Function

We can know the object id using the objectid() function


Syntax:
objectid(object) --> Returns the object id

Example:
o1 = new point
see objectid(o1) + nl
test(o1)

func test v
see objectid(v) + nl

Class point x y z

Output:
021B5808
021B5808

41.17 isobject() Function

We can check the variable to know if it’s an object or not using the isobject() function
Syntax:
isobject(variable) --> Returns True if it's an object, False if it's not

41.18 attributes() Function

We can get the object attributes using the attributes() function


Syntax:
attributes(object) --> Returns a list contains the object attributes

Example:
o1 = new point
aList = attributes(o1) # we can use see attributes(o1)
for t in aList see t next # print xyz
Class Point x y z

41.19 methods() Function

We can get the object methods using the methods() function


Syntax:

41.16. objectid() Function 294

You might also like