Tbpgr Blog

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

ActiveSupport | Object#try

概要

Object#try

詳細

Object#tryについて

Object#try

nilでは無い時だけメソッドを実行したい場合に利用する。
nilの場合は例外は発生せず、nilを返却する

Object#tryはメソッドが存在しない場合にエラーにならない。(nilを返却する)
Object#try!はメソッドが存在しない場合にエラーになる。

サンプル

# encoding: utf-8
require "active_support/core_ext/object/try"

class Hoge
  def hoge
    "hoge"
  end
end

def get_hoge(is_nil)
  is_nil ? nil : Hoge.new
end

[true, false].each do |is_nil|
  p get_hoge(is_nil).try(:hoge)
end

出力

nil
"hoge"

OSSコードリーディング

基本的にはpublic_sendを利用しているだけ。
NilClassをオープンしてtryメソッドを実装し,固定でnilを返すことでエラーが発生しないようにしている。

ActiveSupportオープンクラスを利用した実装によく見られるパターンで、
様々なクラスに共通した振る舞いを実装するために、一部のクラスでエラーがでないように
同一名称でデフォルト値のみを返却するメソッドを定義している。
NilClassの他にはTrueClassやFalseClassなどはよくみる。