R.J.Hare@edinburgh.ac.uk (02/26/91)
I have a program in which I repetitively read in a string. According to what the string contains, I do a variety of things - set up an option, display a file, execute a system command, etc. I would like to do this (fairly obviously) in a case statement, but the test I am carrying out are so varied that I can't quite see how to fit them into a case statement, for example, I will be doing: if match("!",string) then... if match(";",string) then... if find("*",string) then... if type(string) == "integer" then... ...some default action... Any ideas on how I may set this up in a case statement please? Note that because a string starts with "!", this does not preclude the possibility of it also including a "*" elsewhere, so I guess a series of simple if statements won't do the job as in such a circumstance, 2 of the blocks of code would be executed... I guess that there is a ridiculously simple answer, but I don't see it yet! Thanks. Roger Hare.
wgg@cs.washington.edu (William Griswold) (02/26/91)
To handle more general test/action alternatives, I would put the tests and actions in procedures, store them in pairs in a list, and then iterate over the tests in the list until success: record pair(test,action) ... procedure bangmatch(str) return match("!",str) end ... procedure main(arglist) case_list := [pair(bangmatch,bangaction),....] ... if (pr := !case_list).test(string) then pr.action(string) ... end I'm sure there are more elegant solutions, but you get the idea. bill