[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

rb_str_replace not public?

Daniel Berger

12/10/2005 7:12:00 AM

Hi all,

I wanted to use rb_str_replace for a destructive method in a C
extension I'm using. However, it doesn't appear to be public. Why
not? And what should I use instead?

I poked around intern.h a bit, and saw a few potential candidates, but
wasn't sure if there was a suitable replacement. I suppose I could use
rb_funcall, but that seems wrong, given that I know rb_str_replace
exists in string.c.

Regards,

Dan

2 Answers

esmeralda

12/10/2005 9:24:00 AM

0

Daniel Berger wrote:

> Hi all,

Hi,

>
> I wanted to use rb_str_replace for a destructive method in a C
> extension I'm using. However, it doesn't appear to be public. Why
> not? And what should I use instead?
>
> I poked around intern.h a bit, and saw a few potential candidates, but
> wasn't sure if there was a suitable replacement. I suppose I could
> use rb_funcall, but that seems wrong, given that I know rb_str_replace
> exists in string.c.

Why not simply :

VALUE str1; // string to replace
VALUE str2; // replacement string

str1 = str2;
[ or, if you want a different object ]
str1 = rb_str_dup( str2 );

Maybe I missed something...

--
jigmepema <at> wanadoo <dot> fr

Daniel Berger

12/10/2005 4:00:00 PM

0

Harpo wrote:
> Daniel Berger wrote:
>
> > Hi all,
>
> Hi,
>
> >
> > I wanted to use rb_str_replace for a destructive method in a C
> > extension I'm using. However, it doesn't appear to be public. Why
> > not? And what should I use instead?
> >
> > I poked around intern.h a bit, and saw a few potential candidates, but
> > wasn't sure if there was a suitable replacement. I suppose I could
> > use rb_funcall, but that seems wrong, given that I know rb_str_replace
> > exists in string.c.
>
> Why not simply :
>
> VALUE str1; // string to replace
> VALUE str2; // replacement string
>
> str1 = str2;
> [ or, if you want a different object ]
> str1 = rb_str_dup( str2 );
>
> Maybe I missed something...

In my case I need to replace 'self' within a subclass of String, so I
don't want to dup and I can't do a direct assignment:

irb(main):001:0> class Foo < String; def test; self = "hello"; end; end
SyntaxError: compile error
(irb):1: Can't change the value of self
class Foo < String; def test; self = "hello"; end; end

Thus, I cheat by using String#replace. :)

For now I guess I'll just use rb_funcall, which seems to work fine.

Regards,

Dan