new tasks
This commit is contained in:
parent
2a4d27cea0
commit
80737d5a6a
1194 changed files with 15353 additions and 1 deletions
10
Task/Delegates/Tcl/delegates-2.tcl
Normal file
10
Task/Delegates/Tcl/delegates-2.tcl
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
method operation {} {
|
||||
if { [info exists delegate] &&
|
||||
[info object isa object $delegate] &&
|
||||
"thing" in [info object methods $delegate -all]
|
||||
} then {
|
||||
set result [$delegate thing]
|
||||
} else {
|
||||
set result "default implementation"
|
||||
}
|
||||
}
|
||||
53
Task/Delegates/Tcl/delegates.tcl
Normal file
53
Task/Delegates/Tcl/delegates.tcl
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
package require TclOO
|
||||
|
||||
oo::class create Delegate {
|
||||
method thing {} {
|
||||
return "delegate impl."
|
||||
}
|
||||
export thing
|
||||
}
|
||||
|
||||
oo::class create Delegator {
|
||||
variable delegate
|
||||
constructor args {
|
||||
my delegate {*}$args
|
||||
}
|
||||
|
||||
method delegate args {
|
||||
if {[llength $args] == 0} {
|
||||
if {[info exists delegate]} {
|
||||
return $delegate
|
||||
}
|
||||
} elseif {[llength $args] == 1} {
|
||||
set delegate [lindex $args 0]
|
||||
} else {
|
||||
return -code error "wrong # args: should be \"[self] delegate ?target?\""
|
||||
}
|
||||
}
|
||||
|
||||
method operation {} {
|
||||
try {
|
||||
set result [$delegate thing]
|
||||
} on error e {
|
||||
set result "default implementation"
|
||||
}
|
||||
return $result
|
||||
}
|
||||
}
|
||||
|
||||
# to instantiate a named object, use: class create objname; objname aMethod
|
||||
# to have the class name the object: set obj [class new]; $obj aMethod
|
||||
|
||||
Delegator create a
|
||||
set b [Delegator new "not a delegate object"]
|
||||
set c [Delegator new [Delegate new]]
|
||||
|
||||
assert {[a operation] eq "default implementation"} ;# a "named" object, hence "a ..."
|
||||
assert {[$b operation] eq "default implementation"} ;# an "anonymous" object, hence "$b ..."
|
||||
assert {[$c operation] ne "default implementation"}
|
||||
|
||||
# now, set a delegate for object a
|
||||
a delegate [$c delegate]
|
||||
assert {[a operation] ne "default implementation"}
|
||||
|
||||
puts "all assertions passed"
|
||||
Loading…
Add table
Add a link
Reference in a new issue