Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Ruby2.1新規要素 | defの戻り値変更

概要

defの戻り値変更

詳細

defの戻り値が変更され、メソッド名のシンボルを返却するようになった。
(※以前はnilを返却していた)

この変更は

private def hoge
  # some code
end

のような記述を可能にしたい、というのが出発点のようです。
下記が、Rubyのコミッターさんたちのやりとり。
https://bugs.ruby-lang.org/issues/3753

privateを利用するサンプルと、
一部のメソッドをクラス変数の配列に格納するサンプルを作成してみました。

サンプルコード(privateの例)
# encoding: utf-8

class Hoge
  def public_hoge
    private_hoge
  end

  private def private_hoge
    "hoge"
  end

  puts def private_sample
    "sample"
  end
end

print Hoge.new.public_hoge
出力
private_sample
hoge
サンプルコード(メソッドをクラス変数の配列に格納してみた)
# encoding: utf-8
require 'tbpgr_utils'
require 'pp'

class Hoge
  @@hoges = []


  @@hoges << def hoge
    puts "hoge"
  end

  @@hoges << def hige
    puts "hige"
  end

  def hoges
    # hoge/higeの命名をリファクタリングなどで命名変更した場合でも
    # 下記のコードは変更の必要がない
    @@hoges.each do |hoge|
      send(hoge)
    end
  end

  def hage
    "hage"
  end
end

Hoge.new.hoges
出力
hoge
hige