Showing posts with label class_eval. Show all posts
Showing posts with label class_eval. Show all posts

Tuesday, January 06, 2009

Rails module include way

# Rails module include way
# 以下方式的代码在rails中源码中的相当多见,其中的self.included(base)方法是一个回调方法,当此module被其他名为base的module(或者class)include的时候触发此方法。通过class_eval,include,extend加入了实例方法和类方法到base中,代码划分得很干净。

module ActionController
module Components
def self.included(base)
base.class_eval do
include InstanceMethods
extend ClassMethods
helper HelperMethods
end
end

module ClassMethods
end

module HelperMethods
end

module InstanceMethods
end
end
end

Tuesday, January 08, 2008

obj.instance_eval and mod.module_eval(mod.class_eval) usage


class C
def initialize
@x = 1
end
end

c = C.new
c.instance_eval { puts @x }
puts c.instance_variable_get "@x"

C.class_eval do
def some_method
puts "Created in class_eval"
end
end
c = C.new
c.some_method

Wednesday, June 13, 2007

Ruby class_eval example


C = Class.new
C.class_eval do
def some_method
puts "Created in class_eval"
end
end
c = C.new
c.some_method

var = 'test class_eval'
C.class_eval {define_method('talk') {puts var}}
c.talk