rubyメソッドチェーンの作り方
今日はメソッドチェーンの作り方を教えてもらいました。
応用が利くことになると思うので、備忘録的に書いておきます。
メソッドチェーンとは
サンプルです
'hoGe'.downcase.upcase => 'HOGE'
作り方
前のメソッドの戻り値と同じオブジェクトに合わせることです。
class Car def initialize @name = 'car' @mileage = 10000 end def set_name(name) @name = name end def set_mileage(mileage) @mileage = mileage end end car = Car.new car.set_name('hoge').set_mileage(50000) => undefined method `set_mileage' for "hoge":String (NoMethodError) p car
上記の場合はエラーになります。
原因は、set_nameの値がオブジェクトに合わないからです。
stringで終わっているので、Carクラスで終わらせるようにしましょう。
class Car def initialize @name = 'car' @mileage = 10000 end def set_name(name) @name = name self end def set_mileage(mileage) @mileage = mileage self end end car = Car.new car.set_name('hoge').set_mileage(50000) p car => #<Car:0x007f9d1a064870 @name="hoge", @mileage=50000>
まとめ
戻り値の種類を意識することが必要になる。