Rubyの明示的/暗黙的な型変換についてのメモ(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Implicit vs explicit type conversions in Ruby (to_h/to_hash and others) 原文公開日: 2018/01/18 著者: zverok — 名サイト「rubyreferences.github.io」の作者でもあります。 Rubyの明示的/暗黙的な型変換についてのメモ(翻訳) 自分用にメモ。 Rubyには型強制(type coercion)メソッドがいくつもペアになっています。 to_iとto_int to_sとto_str to_aとto_ary to_hとto_hash 右と左はいったい何が違うのでしょうか?どういうときに使い、どんなときに実装するのでしょうか? 短い方は明示的な変換です。 (integerやstringやarrayといった)何らかの型に変換される可能性がある場合は、その型に明示的な変換を実装すべき 何らかの意味のある型に変換されることを期待するのであれば、受け取るデータに対してこれらのメソッドを呼び出すべき 長い方は暗黙的な変換です。 型が自分自身を「kind of」に該当する型(よりよい、または特殊なnumber、string、array、hash)に変換されるとみなす場合にのみ、暗黙的な変換を実装すべき 変換後の型について厳密な要求がある場合は、受け取るデータに対してこれらのメソッドを呼び出すべきだが、クラスの比較ではなくダックタイピングによるRubyらしい方法でチェックしたいと思うのが普通 それ以外の場合にこのメソッドを実装したり呼んだりすることはまかりならぬ Rubyの演算子やコアメソッドは、データを暗黙的に変換します。 “string” + otherは#to_str on otherを呼び、[1,2,3] + otherは#to_aryを呼ぶなど(オブジェクトがこのメソッドに応答しない場合はTypeError: no implicit conversionを返す) “string” * otherや[1,2,3] * otherは#to_int on otherを呼び出す a, b, c = *otherはother#to_aryを呼ぶ(そして独自のコレクションオブジェクトを”unpack”するのに使われるが、otherがto_aryを実装していると思わぬ振る舞いを見せることがある: … Continue reading Rubyの明示的/暗黙的な型変換についてのメモ(翻訳)