Hi all, In my application I need an "edit_distance" method that computes the Edit Distance (Also called Levenshtein Distance, see this: http://en.wikipedia.org/wiki/Levenshtein_distance) between two strings. I wonder where is the right place to put this method. I have a "utils" Ruby file with various extensions to classes and modules that make my life easier. So there are two options: 1) Have a global (Kernel) method named "edit_distance" that accepts two strings 2) Add a "edit_distance_from" method to the String class that accepts the "other" string Which approach is better, in your opinion ? P.S: There are lots of Edit Distance implementations in Ruby online. For example: http://db.cs.helsinki.fi/~jaarnial/mt/archives/000074.html http://ruby.brian-schroeder.de/editierdistanz/
on 2007-05-19 20:31
on 2007-05-19 20:50
On Sun, May 20, 2007 at 03:30:15AM +0900, Eli Bendersky wrote: > the "other" string > > Which approach is better, in your opinion ? If you want to publish this for others to use, rather than just for your own private use, then neither of these is a good idea. I'd go with: 3) Make it a class method of your own distinct module This avoids accidental pollution of namespace or system classes. Then, people can use MyUtils.edit_distance(a,b), or if they want, can explicitly "include MyUtils" to be able to do "edit_distance(a,b)" directly. This is the approach taken by Ruby's own Math library for functions like sqrt: irb(main):001:0> Math.sqrt(9) => 3.0 irb(main):002:0> include Math => Object irb(main):003:0> sqrt(9) => 3.0 Regards, Brian.
on 2007-05-19 20:55
On 5/19/07, Eli Bendersky <firstname.lastname@example.org> wrote: > two strings Crouding the global namespace -1, but if you feel it is convenient. > 2) Add a "edit_distance_from" method to the String class that accepts > the "other" string Why not, just that I believe extending core classes shall be done under one of two conditions, (a) not an API just your program or (b) just that API IOW, your package just does this and the extension is well documented. 3) Create an extension module with a module method edit_distance( str1, str2) Cheers Robert