Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
define_methodに関すること
class Animal
{ cat: 'にゃー', dog: 'わん' }.each do |name, message|
# 動的にクラスやモジュールを定義でき、defによるメソッド定義をしなくてもよい
# メソッド本体はブロックで記述する
define_method(name) do
message
end
end
end
puts Animal.new.cat
class Animal2
{ cat: 'にゃー', dog: 'わん' }.each do |name, message|
# ブロックにブロック引数を加えるとブロック引数がメソッドの引数になる
# ブロック引数:name
define_method(name) do |num|
message * num
end
end
end
# メソッドの引数:2
puts Animal2.new.dog(2)
class Animal3
end
{ cat: 'にゃー', dog: 'わん' }.each do |name, message|
# ブロックをオブジェクトとして定義する
proc = Proc.new { |num| message * num }
# class_evalは、ブロックをクラス定義やモジュール定義の中のコードであるように実行する
# ブロックの戻り値がメソッドの戻り値になる
Animal3.class_eval { define_method(name, proc) }
end
puts Animal3.new.cat(3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment