Ruby

【Ruby】メタプログラミングをする上で使うメソッド

ここではメタプログラミングをする上で使うメソッドについてまとめていきたいと思います。まだメタプログラミングがなんぞかは分かってない←

instance method Module#define_method

メソッド定義のために使うメソッド。第一引数に指定した名前のメソッド名とし、第二引数にそのメソッドの処理内容を指定する。ブロックを渡した場合は、ブロック内の処理内容がメソッドの処理内容となる。

[:failure, :error, :success].each do |method|
  define_method method do
    self.state = method
  end
end

https://docs.ruby-lang.org/ja/latest/method/Module/i/define_method.html

instance method BasicObject#instance_exec

与えられたブロックをレシーバのコンテキストで実行する。第一引数で変数を受け取ることができ、またレシーバのコンテキストとなるので、インスタンス変数やメソッドにアクセスすることができる。

class Fuga
  def initialize
    @fuga = 10
  end

  def number
    3
  end
end

fuga = Fuga.new
fuga.instance_exec(5) { |x| x + @fuga + self.number }  # => 18

https://docs.ruby-lang.org/ja/latest/method/BasicObject/i/instance_exec.html

instance method Object#instance_variable_set

第一引数に指定したインスタンス変数のシンボルに第二引数の値をセットする。

class Fuga; end
fuga = Fuga.new
fuga.instance_variable_set(:@foo, 'foo')
puts fuga.instance_variable_get(:@foo)  # => 'foo

ABOUT ME
sakai
三重出身の28歳。前職はメーカーで働いていて、プログラミングスクールに通って未経験からWeb業界に転職しました。Railsをメインで使っていて、AWSも少しできます。音楽を聞くこととYoutubeを見るのが好きです。最近はへきトラ劇場にハマってます