From: "Hal E. Fulton" Date: 2000-07-09T14:36:44-07:00 Subject: [ruby-talk:03903] Re: require, ensure, and Design by Contract Patrick, I'm interested in this, too. I've been trying to put something together, but my Ruby is not (yet!) as good as Dave's. I'd like to have an implementation that puts as little burden on the programmer as possible. Therefore I'm shying away from what I'm looking at right now: An implementation that requires the programmer to define two other methods for each method for which he wants to check pre- and post- conditions. I thought there might be some way to generate these on the fly, at the time the "pre" function was called, for instance. But there is no way to determine the class or object of the method that called you. But I have been thinking of a syntax something like this: pre("positive:x>0 empty:arr.size==0 old.somevar") # ... post("nonempty:arr.size>0 incr:somevar=old.somevar+1") The "label:" notation would provide a mnemonic for the error message. (Doesn't Eiffel provide this?) The "old.somevar" notation would be a signal to save off the value of somevar so that it could be checked at the end. This is all extremely half-baked, though. Inheritance is the real issue: We have to make sure that contracts are heritable. Discussion is welcome. Hal Fulton