Skip to content

Instantly share code, notes, and snippets.

@Y-Fujikawa
Last active September 12, 2017 03:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Y-Fujikawa/db51b7edf1b790cc85f4272bd0a3ec88 to your computer and use it in GitHub Desktop.
Save Y-Fujikawa/db51b7edf1b790cc85f4272bd0a3ec88 to your computer and use it in GitHub Desktop.
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