A place for an "edit_distance" method

E

Eli Bendersky

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/
 
B

Brian Candler

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 ?

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.
 
R

Robert Dober

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
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,781
Messages
2,569,615
Members
45,293
Latest member
Hue Tran

Latest Threads

Top