From: Paul Lutus Date: 2006-11-09T16:35:05+09:00 Subject: Re: replacing a formula from a string Josselin wrote: > I have a long formula expressed as a string > > formula_1 = "6366.00 * Math.acos(Math.cos(self.latitude) * > Math.cos(latitude) * Math.cos(longitude -self.longitude) + > (Math.sin(self.latitude) * Math.sin(LatitudeRad)) )" > > I need to use it in the preparation of some SQL query conditions like : > > condition += (c(:villes){ 6366.00 * Math.acos(Math.cos(self.latitude) * > Math.cos(latitude) * Math.cos(longitude -self.longitude) + > (Math.sin(self.latitude) * Math.sin(LatitudeRad)) ) < distance } ) > > How could I write it only once 'formula_1' and reuse it like : > condition += (c(:villes){ formula_1 < distance }) # this is wrong as > formula_1 is a string .. The simplest way to solve this problem is to convert your equation into a function. Why are you not doing this? Does the equation change regularly? If there are as many equations as database records, then of course you want to think up a way to interpret the equations as you encounter them. But if there is one equation and many sets of variables to apply to it, then rewrite the text form of your equation as a function. Then read the database records, convert the values to numerics, and submit them to the function. Put simply, it's called "computer programming". From this: > formula_1 = "6366.00 * Math.acos(Math.cos(self.latitude) * > Math.cos(latitude) * Math.cos(longitude -self.longitude) + > (Math.sin(self.latitude) * Math.sin(LatitudeRad)) )" to this (not tested): function formula_1(latitude,longitude,latitude_rad) return 6366.0 * math.acos(@latitude) * Math.cos(latitude) * Math.cos(longitude - @longitude) + (Math.sin(@latitude) * Math.sin(latitude_rad))) end -- Paul Lutus http://www.arachnoid.com