Skip to content

Instantly share code, notes, and snippets.

@kazufusa
Last active August 29, 2015 14:11
Show Gist options
  • Save kazufusa/f9d6a4275cc6e5a58480 to your computer and use it in GitHub Desktop.
Save kazufusa/f9d6a4275cc6e5a58480 to your computer and use it in GitHub Desktop.
puts "# Test 1"
class Base1
def self.set_message message
@@message = message
end
def put_message point
@@message % point
end
end
class MyClass1 < Base1
set_message "I get %d points."
end
class HisClass1 < Base1
set_message "He gets %d points."
end
me = MyClass1.new
he = HisClass1.new
p me.put_message 1 #=> "He gets 1 points."
p he.put_message 2 #=> "He gets 2 points."
p me.put_message 3 #=> "He gets 3 points."
puts "\n# Test 2"
class Base2
def self.set_message message
class_variable_set :@@message, message
end
def put_message point
self.class.class_variable_get(:@@message) % point
end
end
class MyClass2 < Base2
set_message "I get %d points."
end
class HisClass2 < Base2
set_message "He gets %d points."
end
me = MyClass2.new
he = HisClass2.new
p me.put_message 1 #=> "I get 1 points."
p he.put_message 2 #=> "He gets 2 points."
p me.put_message 3 #=> "I get 3 points."
puts "\n# Test 3"
class Base3
def self.set_message message
define_method :put_message do |point|
message % point
end
end
end
class MyClass3 < Base3
set_message "I get %d points."
end
class HisClass3 < Base3
set_message "He gets %d points."
end
me = MyClass3.new
he = HisClass3.new
p me.put_message 1 #=> "I get 1 points."
p he.put_message 2 #=> "He gets 2 points."
p me.put_message 3 #=> "I get 3 points."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment