As already pointed out in earlier an if statement that is almost the same eon each side with the exception of function calls cam be factored with func = ? (logic) :func1 : :func2 latter Objec.send(func) I find all those long equations pretty offensive, similar and unclear and think that they should be factored I don't have a clue what you are trying to do with the code but you could factor all those equations to something sample like BigEqn( left_or_right , type_of_eqn ) where the type gives the array to multiply by or some other suitable thing that relates to what that equation actually means. This may also solve your earlier problem without using the send Ralph From: "Mark Hahn" <mchahn / facelink.com> > The two if statements below are identical except the words left and right > (and < & >) are reversed. I don't think this can be factored but I thought > I'd throw this out to see if anyone can think of a way. > > I thought maybe some sort of text pre-processing could help, but then I > realized the resulting code would be the same. > > def find key, countIn > if key < @key > @leftCount += 1 > if @left > nextNode = @left; nextCount = @leftCount > matchCount = countIn-@leftCount-@rightCount > leftMatchCount = @leftCount- / left.rightCount-@left.leftCount > if 3*@rightCount+2*matchCount+1*leftMatchCount+2*@left.leftCount < > 2*@rightCount+1*matchCount+2*leftMatchCount+3*@left.leftCount > @left.right,@left,nextCount,@leftCount,@left.rightCount = > > self,@left.right,countIn,@left.rightCount,countIn-@leftCount+@left.rightCoun > t > end > return nextNode.find(key,nextCount) > end > end > if key > @key > @rightCount += 1 > if @right > nextNode = @right; nextCount = @rightCount > matchCount = countIn-@leftCount-@rightCount > rightMatchCount = @rightCount- / right.leftCount-@right.rightCount > if 3*@leftCount+2*matchCount+1*rightMatchCount+2*@right.rightCount < > 2*@leftCount+1*matchCount+2*rightMatchCount+3*@right.rightCount > @right.left,@right,nextCount,@rightCount,@right.leftCount = > > self,@right.left,countIn,@right.leftCount,countIn-@rightCount+@right.leftCou > nt > end > return nextNode.find(key,nextCount) > end > end > return self > end > >