Hi Readers,
This is the last post for Ruby beginners. Today we are going to learn some small concepts and Ruby load paths and auto loading in Rails
define_method:
class Array
{:second => 1, :third => 2}.each do |method,element|
define_method(method) do
self[element]
end
end
end
array = %w(A B C)
puts array.first # => A
puts array.second # => B
puts array.third # => C
{:second => 1, :third => 2}.each do |method,element|
define_method(method) do
self[element]
end
end
end
array = %w(A B C)
puts array.first # => A
puts array.second # => B
puts array.third # => C
Object Space:
ObjectSpace.each_object(Numeric) { |n| puts n }
Class Reflection:
# Using Class#superclass
klass = Fixnum
begin
print klass
klass = klass.superclass
print " < " if klass
end while klass
# => Fixnum < Integer < Numeric < Object
# Using Class#ancestors
Fixnum.ancestors
# => Fixnum, Integer, Precision, Numeric, Comparable, Object, Kernel
# Inspecting methods and variables
Fixnum.public_instance_methods(false)
Fixnum.class_variables
Fixnum.constants
1.instance_variables
klass = Fixnum
begin
print klass
klass = klass.superclass
print " < " if klass
end while klass
# => Fixnum < Integer < Numeric < Object
# Using Class#ancestors
Fixnum.ancestors
# => Fixnum, Integer, Precision, Numeric, Comparable, Object, Kernel
# Inspecting methods and variables
Fixnum.public_instance_methods(false)
Fixnum.class_variables
Fixnum.constants
1.instance_variables
System Hooks: Class#inherited
class A
@@subclasses = {}
# Invoked when a new class is created that extends this class
def self.inherited(child)
puts "inherited"
@@subclasses[self] ||= []
@@subclasses[self] << child
end
def self.subclasses
@@subclasses[self]
end
end
class B < A
end
puts A.subclasses
@@subclasses = {}
# Invoked when a new class is created that extends this class
def self.inherited(child)
puts "inherited"
@@subclasses[self] ||= []
@@subclasses[self] << child
end
def self.subclasses
@@subclasses[self]
end
end
class B < A
end
puts A.subclasses
Ruby Load Path and Auto Loading in Rails:
- The Ruby load path is stored in $: and is used when you require code
- Models, views, controllers, and helpers under the app dir are loaded automatically
- Classes under lib are also loaded automatically
- You can add load paths in config/environment.rb
- Class and module names must correspond to the file path where they are defined for auto loading to work
No comments:
Post a Comment