Techioz Blog

Ruby で一連の 1 行メソッドを記述するより簡潔な方法はありますか?

概要

場合によっては、次のようないくつかのメソッドを作成することになります。

module XyzGateway
  module Defaults
    def pull_sample asynch=true
      'N/A'
    end

    def is_pull_available?
      false
    end

    def is_push_available?
      true
    end

    def connect params
      logger.debug "Invalid gateway(#{self.id}), could not resolve its type. #{ap self}"
    end

    def gateway_init
    end

    def disconnect
    end
  end
end

このような場合にこれらの def キーワードと end キーワードを回避する方法を探しているだけですが、何か方法はありますか?上記の私の場合、これらはデフォルトの動作であり、これらの def, end を回避できれば幸いです。

編集:はい、実際にはこれらすべてにXyzGateway::Defaultsモジュールがあります。

解決策

これらを回避するには、define_method を使用する必要があります。

define_method :is_pull_available? { false }

ただし、コードを短縮することだけが目的の場合は、メソッド全体を 1 行にまとめることができます。これは、非常に短いメソッドの場合はそれほど悪くはありません (ここでの 4 番目のメソッドはおそらく少し長すぎるため、このように要約すると読みやすさが損なわれます)。 IMO):

def pull_sample(asynch = true); 'N/A'; end
def is_pull_available?; false; end
def is_push_available?; true; end
def connect params; logger.debug "Invalid gateway(#{self.id}), could not resolve its type. #{ap self}"; end
def gateway_init; end
def disconnect; end