Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
instance method
StringIO#putc
(::Numeric | ::String arg0) -> untyped
putc(object) → object
ext/stringio/stringio.c
View on GitHub ↗
static VALUE
strio_putc(VALUE self, VALUE ch)
{
struct StringIO *ptr = writable(self);
VALUE str;
check_modifiable(ptr);
if (RB_TYPE_P(ch, T_STRING)) {
if (NIL_P(ptr->string)) return ch;
str = rb_str_substr(ch, 0, 1);
}
else {
char c = NUM2CHR(ch);
if (NIL_P(ptr->string)) return ch;
str = rb_str_new(&c, 1);
}
strio_write(self, str);
return ch;
}
Replaces one or more bytes at position pos with bytes of the given argument; advances the position by the count of bytes written; returns the argument.
StringIO object for 1-byte characters.
Example
strio = StringIO.new('foo') strio.pos # => 0
With 1-byte argument, replaces one byte:
Example
strio.putc('b') strio.string # => "boo" strio.pos # => 1 strio.putc('a') # => "a" strio.string # => "bao" strio.pos # => 2 strio.putc('r') # => "r" strio.string # => "bar" strio.pos # => 3 strio.putc('n') # => "n" strio.string # => "barn" strio.pos # => 4
Fills with null characters if necessary:
Example
strio.pos = 6 strio.putc('x') # => "x" strio.string # => "barn\u0000\u0000x" strio.pos # => 7
With integer argument, replaces one byte with the low-order byte of the integer:
Example
strio = StringIO.new('foo') strio.putc(70) strio.string # => "Foo" strio.putc(79) strio.string # => "FOo" strio.putc(79 + 1024) strio.string # => "FOO"
StringIO object for Multi-byte characters:
Example
greek = 'αβγδε' # Five 2-byte characters. strio = StringIO.new(greek) strio.string# => "αβγδε" strio.string.b # => "\xCE\xB1\xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5" strio.string.bytesize # => 10 strio.string.chars # => ["α", "β", "γ", "δ", "ε"] strio.string.size # => 5
With 1-byte argument, replaces one byte of the string:
Example
strio.putc(' ') # 1-byte ascii space. strio.pos # => 1 strio.string # => " \xB1βγδε" strio.string.b # => " \xB1\xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5" strio.string.bytesize # => 10 strio.string.chars # => [" ", "\xB1", "β", "γ", "δ", "ε"] strio.string.size # => 6 strio.putc(' ') strio.pos # => 2 strio.string # => " βγδε" strio.string.b # => " \xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5" strio.string.bytesize # => 10 strio.string.chars # => [" ", " ", "β", "γ", "δ", "ε"] strio.string.size # => 6
With 2-byte argument, replaces two bytes of the string:
Example
strio.rewind strio.putc('α') strio.pos # => 2 strio.string # => "αβγδε" strio.string.b # => "\xCE\xB1\xCE\xB2\xCE\xB3\xCE\xB4\xCE\xB5" strio.string.bytesize # => 10 strio.string.chars # => ["α", "β", "γ", "δ", "ε"] strio.string.size # => 5