joinのデフォルトセパレータ

文字列の配列を結合するさい、Pythonでは

"".join(['1', '2', '3'])
# => '123'

という書き方をする。
区切り文字を入れたい場合は、以下のようにすればよい。

"_".join(['1', '2', '3'])
# => '1_2_3'

さて、RubyにおいてはArrayがjoinを持っていて、それぞれの要素を自動的に文字列化してくれる(要素がto_sを持っている場合?)。

[1, 2, 3].join
# => "123"

次のような問題を考えてみる。___に当てはまるコードは何だろうか。

An Unconventional Join

___

assert_equal "a_b_c", ["a", "b", "c"].join

Rubyにはデフォルトセパレータ$,がグローバルスコープに存在し、これに文字列を代入することによりArray#joinの区切り文字列を予め決めることができる。
ただしKernel#printの各引数の出力の区切りにもこの文字列が使われるので注意。

variable $,

$, = "_"
assert_equal "a_b_c", ["a", "b", "c"].join
# => true