They are called single point methods and can be defined as follows:
class Person
def favorite_meal
"Big Mac"
end
end
Fred, Joe = 2.times.map { Person.new }
def Fred.favorite_meal
"Le Big Mac"
end
Joe.favorite_meal
Fred.favorite_meal
Other ways to define the same singleton method would be:
Fred.define_singleton_method :favorite_meal do "Le Big Mac" end
and
class << Fred
def favorite_meal
"Le Big Mac"
end
end
.
: 2 .
2-. , . fred = Person.new. :
, .
, , y_support/name_magic, , .
gem install y_support :
require 'y_support/name_magic'
class Dog
include NameMagic
def speak; puts "Bow wow!" end
end
Spot, Rover = 2.times.map { Dog.new }
Dog , .
Dog.instances.map { |dog| dog.name }
Dog.instances.names
( ), , .
1- , def Fred.foobar , . singleton , class << Fred:
module Foo
def bar; "Fretbar!" end
end
class << Fred
include Foo
alias le_favorite favorite_meal
end
Fred.bar
Fred.le_favorite
Fred.define_singleton_method 4- , :
local_var = 42
Fred.singleton_class.class_exec do
define_method :baz do local_var + 1 end
end
Fred.baz
, local_var.
local_var = 32
Fred.baz
, , , , .