ruby メタプログラミング

本稿について

本稿はサイト運営者が学んだことなどを記したメモの内容です。
全てが正確な情報とは限りません。ご注意ください。また修正するべき点は適時修正していきます
eval
eval内部はrubyのプログラムとして実行できる
a = 10
b = 8
eval "a - b”
=> 8

send
sendの引数にメソッド名を渡すとそのメソッドが実行できる
User.send("class")
=> Class
User.class
=> Class

send(引数あり)
SecureRandom.hex(8)
=> "9983e0732908f79c"
SecureRandom.send("hex", 8)
=> "4ee152cf1a9a5a1f"

instance_variable_set
動的に変数名を設定する
object = Object.new
=> #<Object:0x00007ff5ce5be368>
object.instance_variable_set("@hoge", 10)
=> 10

Object.const_get
変数の内容をクラス名として利用する
class_name = ‘User'
Object.const_get(class_name).method

Back