From design perspective it is best you always assume that the callback is on global level i.e. a procedure.
The magic lies in the way you pass on the callback:
#
http://wiki.tcl.tk/21595. v20
# @author Donal Fellows
proc ::oo::Helpers::callback {method args} {
list [uplevel 1 {namespace which my}] $method {*}$args
}
oo::class create test {}
oo::define test method sc {cb} {
uplevel "#0" $cb
}
oo::define test method print {} {
puts "this is the method print"
}
oo::define test method docb {} {
my sc [callback print]
}
proc cb1 {args} {puts "this is the proc cb1"}
test create c
c sc cb1
c sc [list c print]
c docb