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