strings/byte_splices_parens.rb

tests/_examples/strings/byte_splices_parens.rb in the metorex repository.

# `bytesplice` replaces a run of bytes in place, counting positions in bytes
# rather than in characters, and refuses an offset inside a character.
greeting = +"hello"
p(greeting.bytesplice(0, 1, "j"))
p(greeting)

p((+"hello").bytesplice(1..2, "HELLO", 0..1))
p((+"hello").bytesplice(0, 0, "say "))

japanese = +"こんにちは"
p(japanese.bytesplice(0, 3, "xxx"))

begin
  (+"こんにちは").bytesplice(1, 0, "x")
rescue IndexError => problem
  puts(problem.message)
end

begin
  (+"hello").bytesplice(6, 0, "x")
rescue IndexError => problem
  puts(problem.message)
end

begin
  (+"hello").bytesplice(-6...-6, "x")
rescue RangeError => problem
  puts(problem.message)
end

begin
  "frozen".freeze.bytesplice(0, 1, "x")
rescue FrozenError => problem
  puts(problem.message)
end

Output:

"jello"
"jello"
"hHElo"
"say hello"
"xxxんにちは"
offset 1 does not land on character boundary
index 6 out of string
-6...-6 out of range
can't modify frozen String: "frozen"