6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby]define_methodを使えるようにしておきましょうか。

Last updated at Posted at 2021-05-19

define_methodとは

define_methodとは、簡単に言うとメソッドを動的に定義できるメソッドです。
これに関しては、言葉より実際に処理を見た方が理解できるかと思います。

基本的な使い方

第1引数にはメソッド名、第2引数に処理内容を記述します。

class Foo
  def foo
    p 'foo'
  end

  define_method(:bar, instance_method(:foo))
end

# barを直接定義しなくてもメソッドのように使えている
Foo.new.bar #=> "foo"

第2引数の代わりにブロックを渡すことも可能

# wordには「foo」「bar」「baz」がそれぞれ入る
%w(foo bar baz).each do |word|
  define_method :word do |i = nil|
    # iがtrueの場合は、i + 1、falseの場合はメソッド名を返す
    i ? i + 1 : word
  end
end

puts foo #=> "foo"
puts bar(2) #=> 3
puts baz #=> "baz"

まとめ

動的メソッドを使うことで、コードの重複を無くすことが可能なので、タイミングを見て活用することも一つの手段ですね!

6
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?