/
tcloo.tcl
65 lines (58 loc) · 1.31 KB
/
tcloo.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Declair accessor methods for instance variables
#
proc oo::define::accessor args {
set currentclass [lindex [info level 1] 1]
foreach var $args {
oo::define $currentclass [subst { method $var args { set $var {*}\$args } }]
}
}
#oo::class create X {
# variable a b c
# accessor a b
#
# constructor {} {
# set a 34
# }
#}
#
#X create x
#puts [x a]
#x a 21
#puts [x a]
# Control method visibility
#
proc oo::define::public { method name args body } {
uplevel 1 [list method $name $args $body]
uplevel 1 [list export $name]
}
proc oo::define::private { method name args body } {
uplevel 1 [list method $name $args $body]
uplevel 1 [list unexport $name]
}
#oo::class create X {
# public method XXX {} { puts XXX }
#}
#
#X create a
#a XXX
#
#exit
# Create procs in the objects namespace that forward calls to class methods. This
# allows methods to be called without [self] or [my].
#
proc procs args {
foreach proc $args {
proc [uplevel 1 { namespace current }]::$proc args [subst { tailcall my $proc {*}\$args }]
}
}
#oo::class create X {
# constructor {} {
# nsproc a b c
# }
#
# method a {} { b }
# method b {} { puts XXX }
#}
#
#X create x
#x a