その他

【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
酒井 駿
名古屋工業大学大学院卒業後、豊田合成(株)で品質管理を経験し、その後スタートアップ・マネーフォワードを経て、2024年11月に株式会社EGGHEAD創業。 製造業とエンジニアリング、両方の現場の知見を活かし、製造業における生成AIを活用した業務改善やシステム開発を支援します。