You are on page 1of 10

Ring Documentation, Release 1.

wow!
Message from f1
hello world
hello world
hello world

Example:
Func Main
aList = [1,2,3,4]
Map (aList , func x {
return x*x
} )
see aList
aList = [4,9,14,25]
Map(aList, :myfilter )
see aList
aList = [11,12,13,14]
Map (aList , func x {
if x%2=0
return "even"
else
return "odd"
ok
})
see aList

Func myfilter x
if x = 9
return "True"
else
return "False"
ok

Func Map aList,cFunc


for x in aList
x = call cFunc(x)
next

Output:
1
4
9
16
False
True
False
False
odd
even
odd
even

41.5 Equality of functions

We can test if function = function or not using the = or != operators

41.5. Equality of functions 265


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

41.5. Equality of functions 266


CHAPTER

FORTYTWO

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.

42.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

42.2 globals() Function

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

267
Ring Documentation, Release 1.5

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

42.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

42.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:

42.3. functions() Function 268


Ring Documentation, Release 1.5

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.

42.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

42.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:

42.5. islocal() Function 269


Ring Documentation, Release 1.5

x=10 y=20

test()

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

Output:
1
1
0

42.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

42.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

42.7. isfunction() Function 270


Ring Documentation, Release 1.5

Output:
1
1
0

42.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

42.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

42.9. packages() Function 271


Ring Documentation, Release 1.5

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

42.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

42.12 isclass() Function

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


Syntax:

42.11. classes() Function 272


Ring Documentation, Release 1.5

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

42.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

42.13. packageclasses() Function 273


Ring Documentation, Release 1.5

class2
class3

42.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

42.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

42.14. ispackageclass() Function 274

You might also like