Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Writing a "String#jindex" method to do the same for "index" as "String#jlength" does for "length"

Reply
Thread Tools

Writing a "String#jindex" method to do the same for "index" as "String#jlength" does for "length"

 
 
Greg Hurrell
Guest
Posts: n/a
 
      02-25-2007
So I've been using the 'jcode' library to get UTF-8 support and wanted
to add a convenience method called "jindex" that would work with multi-
byte characters in much the same way that "jlength" does.

The basic idea is to call the real "index" method to do the work, and
then convert the returned byte-count index into a character-count
index before returning it to the user. This works fine, but the
problem is that I can't find a way to propagate $~ back to the user.

That is, after calling this:

'foo'.index /foo/

$~ is set and $~[0] is "foo".

But when I do this.

'foo'.jindex /foo/

$~ is nil. The following short irb session demonstrates what's
happening in the two cases:

irb(main):001:0> class StringTest < String
irb(main):002:1> def index foo
irb(main):003:2> r = super
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> StringTest.new('foo').index /o/
=> 1
irb(main):007:0> $~[0]
NoMethodError: undefined method `[]' for nil:NilClass
from (irb):7
from :0
irb(main):008:0> String.new('foo').index /o/
=> 1
irb(main):009:0> $~[0]
=> "o"

So I guess this is a more general question. If something inside a
method sets $~, how do you propagate this back to the caller? There
was a thread called "How to preserve $~ when extending Regexp#match"
last year that touched on a similar issue (http://groups.google.com/
group/comp.lang.ruby/browse_thread/thread/73ccf213a9c0802d/
a93554cd466acb44). This leads me to believe that the
"special_local_set" function is being used under the hood by the
"index" method and there will be no way for my "jindex" method to
mimick its behaviour without also getting down into the C extension
level, something I am not too keen to do as it is probably a bit over
my head for now...

Are my worst fears right on this one?

Cheers,
Greg

 
Reply With Quote
 
 
 
 
Greg Hurrell
Guest
Posts: n/a
 
      02-26-2007
On 25 feb, 18:16, "Greg Hurrell" <(E-Mail Removed)> wrote:
>
> So I guess this is a more general question. If something inside a
> method sets $~, how do you propagate this back to the caller? There
> was a thread called "How to preserve $~ when extending Regexp#match"
> last year that touched on a similar issue (http://groups.google.com/
> group/comp.lang.ruby/browse_thread/thread/73ccf213a9c0802d/
> a93554cd466acb44). This leads me to believe that the
> "special_local_set" function is being used under the hood by the
> "index" method and there will be no way for my "jindex" method to
> mimick its behaviour without also getting down into the C extension
> level, something I am not too keen to do as it is probably a bit over
> my head for now...


For the record, I decided to bite the bullet and try writing my first
C extension for Ruby. It works and uses rb_backref_get and
rb_backref_set to ensure that $~ gets correctly propagated back to the
caller. If anyone knows of a clean, pure-Ruby way to do this (without
a C extension) please let me know as it would be better from a
portability/deployment perspective.

Cheers,
Greg

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem two users writing to the same file at same time id10t error ASP .Net 3 08-31-2009 06:33 PM
Question on multi-thread execute the same method of same classinstance QQ Java 6 03-28-2008 02:56 PM
calling a method with 'throws IOException' from another method in the same class rleroux@telus.net Java 1 01-28-2007 06:30 AM
Two processes writing to the same XML file at the same time? darrel ASP .Net 2 04-05-2006 05:30 PM
Any problems with writing the information into a file - Multi-users perform writing the same file at the same time ???? HNguyen ASP .Net 4 12-21-2004 01:53 PM



Advertisments