ここではrubyにおける「文字列として結合」するメソッドのうち、#{}
を使うと無難だよということを説明していきます。
Contents
rubyの「文字列として結合」
rubyでは、文字列を連結するメソッドとして#+
と#{}
という2つのメソッドが用意されています。通常文字列どうしの結合では、この2つのメソッドは同じ結果を得ます。
str_a = "world."str_b = "Hello, " + str_a + " How are you?"str_c = "Hello, #{str_a} How are you?"puts str_b # -> Hello, world. How are you?puts str_c # -> Hello, world. How are you?
ここでカンの良い人は気づいたかもしれませんが、上のコードのstr_b, str_cが同じ結果を出力するのは、「文字列どうしの結合だから」です。つまり、実装時のミスなどで「数値+文字列の結合」という形になった場合などでは、得られる結果が異なってきます。
str_a = 100str_b = "100 * " + str_a + " = 10000"# -> `+': no implicit conversion of Integer into String (TypeError)puts str_b
上のコード例に見られるように、#+
の場合はTypeErrorが発生して処理が正常に終了しません。
これに対して、#{}
(「式展開 interpolation」と呼ばれます)ではメソッド内部で文字列でない値に対してto_s
して文字列にしてから結合処理するため、上のようなエラーが発生しません(#{}
は値がnil
の時も空文字""
として出力します)。
また、to_sはObjectクラスにあるため、「すべてがObject」の世界であるrubyではほとんどのオブジェクトでエラーなく実行することが可能です。
※「ほとんどの」と書いたのは、rubyではObject < Kernel < BasicObjectという継承関係があるので、Objectクラスより上位のKernel, BasicObjectにおいてはエラーになります。
以上のような理由から、「文字列としての結合」には#{}
メソッドを利用する方が無難です(書き方が私の好みでもあります)。