array_methods/joining_and_inspecting_no_parens.rb
tests/_examples/array_methods/joining_and_inspecting_no_parens.rb in the metorex repository.
# With no separator, or with nil for one, `$,` says what goes between.
p [1, 2, 3].join
$, = "_"
p [1, 2, 3].join
p [1, 2, 3].join(nil)
$, = nil
# An element is asked for `to_str`, then `to_ary`, then `to_s`, which is the
# order Ruby tries.
class Spells
def to_str
nil
end
def to_ary
nil
end
def to_s
"spelled"
end
end
p [Spells.new].join
# A join is written in the encoding the first piece is written in, widened by
# the first piece that is not all ASCII. Two pieces neither of which is ASCII
# and whose encodings differ cannot be joined at all.
p [].join.encoding
p ["jp".encode("EUC-JP"), "utf8"].join.encoding
begin
["\u{3042}", [0xFF].pack("C")].join
rescue EncodingError => refused
p refused.class.ancestors.include?(EncodingError)
end
# `inspect` asks what an element's own `inspect` answered for its `to_s` when
# that answer is no String, and never asks either one for `to_str`.
class Answers
def inspect
self
end
def to_s
"answered"
end
end
p [Answers.new].inspect
# A symbol key prints without quotes only where it is named plainly enough to
# read back that way.
p({ a: 1, a!: 1, a?: 1 })
p({ "needs-quotes": 1 })
p({ "": 1 })
Output:
"123"
"1_2_3"
"1_2_3"
"spelled"
#<Encoding:US-ASCII>
#<Encoding:EUC-JP>
true
"[answered]"
{a: 1, a!: 1, a?: 1}
{"needs-quotes": 1}
{"": 1}