Você está na página 1de 10

Ring Documentation, Release 1.

Func Test
see "Message from the test function!" + nl

Func Times nCount,F

for x = 1 to nCount
Call F()
next

Output:
Message from the test function!
Message from the test function!
Message from the test function!
Message from the test function!
Message from the test function!

36.4 Anonymous and Nested Functions

Anonymous Functions are functions without names that can be passed as parameters to other functions or stored in
variables.
Syntax:
Func [Parameters] { [statements] }

Example:
test( func x,y {
see "hello" + nl
see "Sum : " + (x+y) + nl
} )

new great { f1() }

times(3, func { see "hello world" + nl } )

func test x
call x(3,3)
see "wow!" + nl

func times n,x


for t=1 to n
call x()
next

Class great
func f1
f2( func { see "Message from f1" + nl } )

func f2 x
call x()

Output:
hello
Sum : 6

36.4. Anonymous and Nested Functions 198


Ring Documentation, Release 1.3

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

36.5 Equality of functions

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

36.5. Equality of functions 199


Ring Documentation, Release 1.3

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

36.5. Equality of functions 200


CHAPTER

THIRTYSEVEN

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.

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

37.2 globals() Function

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

201
Ring Documentation, Release 1.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

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

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

37.3. functions() Function 202


Ring Documentation, Release 1.3

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

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

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

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

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

37.5. islocal() Function 203


Ring Documentation, Release 1.3

x=10 y=20

test()

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

Output:
1
1
0

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

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

37.7. isfunction() Function 204


Ring Documentation, Release 1.3

Output:
1
1
0

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

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

37.9. packages() Function 205


Ring Documentation, Release 1.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

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

37.12 isclass() Function

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


Syntax:

37.11. classes() Function 206


Ring Documentation, Release 1.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

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

37.13. packageclasses() Function 207

Você também pode gostar