让一个类include一个模块的几种方法

module Test
module ClassMethods
def test_class
p 'this is a class method'
end
end

module InstanceMethods
def test_ins
p 'this is a instance method'
end

def method_missing
self
end
end

# def self.included(receiver)
# receiver.extend ClassMethods
# receiver.send :include, InstanceMethods
# end
end

=begin rdoc
Add instance methods
=end

# String.class_eval("include Test::InstanceMethods")
# 's'.test_ins # => "this is a instance method"

# String.send :include,Test::InstanceMethods
# 's'.test_ins # => "this is a instance method"

=begin rdoc
Add class methods
=end

# class << String;include Test::ClassMethods;end
# String.test_class # => "this is a class method"

# String.extend Test::ClassMethods
# String.test_class # => "this is a class method"


[size=large]从上面的代码可以看出:

class_eval和send :include,Module是一个作用,
都是将一个模块变成self类的实例方法.

class <<和extend是一个作用,
都可以将一个模块变成self的类方法,都把Module的方法塞进了sefl类的metaclass里面.[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值