| ! Chooo.h by Krister Fundin (fundin@yahoo.com) | |
| ! | |
| ! This is an object oriented extension to the ChooseObjects entry point. | |
| ! Adopting it only requires a couple of simple steps: | |
| ! | |
| ! 1. In your ChooseObjects routine, start by generating a default return | |
| ! value. If you, for instance, want to exclude scenery from "all" lists, | |
| ! then this could be done here. If you don't want to make any such global | |
| ! decisions, just choose a default of 0 if the "code" argument is 0 or 1, | |
| ! or a number like 5 if the code is 2. | |
| ! | |
| ! 2. Add this line to the end of your ChooseObjects routine: | |
| ! | |
| ! return ChooseObjectsOO(code, default); | |
| ! | |
| ! where the second argument is the default value you decided on earlier. | |
| ! | |
| ! 3. In any object or class for which you want to return something else | |
| ! than the default value, give it one of the methods choose_noun(), | |
| ! choose_second() or choose_multi(). | |
| ! | |
| ! choose_noun() | |
| ! Is called when the code is 2 and the object under consideration is a | |
| ! noun. Return 1 to 9 or false to not make a decision. | |
| ! | |
| ! choose_second(noun) | |
| ! Is called when the code is 2 and the object under consideration is a | |
| ! second. The noun is given as the first argument. Return 1 to 9 or false | |
| ! to not make a decision. | |
| ! | |
| ! choose_multi(code) | |
| ! Is called when code is 0 or 1. The code is passed as the first argument. | |
| ! Return 1 to force the object to be included in the "all" list, 2 to | |
| ! force it to be excluded, or false to not make a decision. | |
| ! | |
| ! These three methods are all additive. If an object returns false, and | |
| ! one of its superclasses has its own method, that superclass is asked to | |
| ! do the same decision. If it also returns false, the process is repeated. | |
| ! If no decision is made, the default value supplied to ChooseObjectsOO() | |
| ! is returned. You can also force the default value to be chosen by | |
| ! returning -1 from any of these methods. | |
| ! | |
| ! In all three methods, you can use action_to_be to check the action. It | |
| ! is also possible to use the same implied switch syntax as in before and | |
| ! after routines. | |
| ! | |
| ! As you can see, the object oriented interface doesn't completely replace | |
| ! the old entry point interface but rather augments it. First, a decision | |
| ! is made on a global level, then the object has a chance to override that | |
| ! decision. | |
| ! | |
| ! Krister Fundin, 2005 | |
| property additive choose_noun; | |
| property additive choose_second; | |
| property additive choose_multi; | |
| [ ChooseObjectsOO obj code default par ret s; | |
| ! set the action for easy switching | |
| s = action; | |
| action = action_to_be; | |
| ! check if we have reversed grammar | |
| if (action_reversed) | |
| par = 1-parameters; | |
| else | |
| par = parameters; | |
| ! call the appropriate method | |
| if (code == 2) | |
| { | |
| if (par == 0) | |
| ret = obj.choose_noun(); | |
| else | |
| ret = obj.choose_second(inputobjs-->2); | |
| } | |
| else | |
| { | |
| ret = obj.choose_multi(code); | |
| } | |
| ! restore old action | |
| action = s; | |
| ! uncomment for debugging | |
| !print (name) obj, ": code = ", code, ", ret = ", ret, | |
| ! ", default = ", default; | |
| !new_line; | |
| ! if we have a value, return it, else return the default | |
| if (ret && ret ~= -1) | |
| return ret; | |
| else | |
| return default; | |
| ]; | |
Xet Storage Details
- Size:
- 3.27 kB
- Xet hash:
- eb5c218682b4ca990f57249b01def7d7d2902a1f3adde3795c66b05c8c29a8c8
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.