Forum: Ruby rb_str_replace not public?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
djberg96 (Guest)
on 2005-12-10 09:13
(Received via mailing list)
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
trashcan (Guest)
on 2005-12-10 11:31
(Received via mailing list)
Daniel B. 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...
djberg96 (Guest)
on 2005-12-10 18:04
(Received via mailing list)
Harpo wrote:
> >
> 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
This topic is locked and can not be replied to.