Posted to tcl by aspect at Fri Nov 24 14:19:47 GMT 2017view raw

  1. oo::class create Person {
  2. variable age
  3. variable sex
  4.  
  5. constructor {Name Age Sex} {
  6. set name $Name
  7. set age $Age
  8. set sex $Sex
  9. my Invariants
  10. }
  11.  
  12. method Invariants {} {
  13. puts "Testing invariants: $age $sex"
  14. if {$age >= 0 && $age < 120} {} {error "Age must be between 0 and 120."}
  15. if {$sex == "M" || $sex == "F"} {} {error "Sex must be M or F"}
  16. }
  17.  
  18. method InvariantsFilter args {
  19. next {*}$args
  20. my Invariants
  21. }
  22. filter InvariantsFilter
  23.  
  24. method set_age {years} {
  25. set age $years
  26. }
  27.  
  28. method change_sex {mf} {
  29. set sex $mf
  30. }
  31. }
  32.  
  33. Person create jim "Jim Bob" 5 M
  34. jim set_age 300