Ruby 基础+进阶 第二天

本文详细介绍了Ruby的元编程概念,包括动态元编程的特性。内省机制允许对象检测自身属性和方法。文章还探讨了打开类、猴子补丁、细化的概念,并解释了如何避免猴子补丁的问题。此外,讲解了类、模块、对象之间的关系,常量的命名空间,以及Include、Extend、Load、Require的区别。最后,提到了接收者、祖先链和self的用法,以及private方法的调用规则。
摘要由CSDN通过智能技术生成

本次学习资料

通读《Ruby元编程》,记录下有趣的以及不明白的知识点

元编程

元编程是能编写能写代码的代码。

编写在运行时操作自身的代码,称为动态元编程,代码生成器和编译器的那种方式称为静态元编程。Ruby不需要编译,因此非常适合元编程。

内省机制

inspection,意思为检查,反省的意思,所以顾名思义,就是可以检测自己属于什么类,自己有没有某个方法,自己的父类是谁。

◆:一个ruby对象o 的内省

1:得到自己的object id: o.object_id

2:检测自己的类型 inspect type: [].class == Array

3:检测自己的类:inspect class: o.class == Foo o.instance_of?(Foo)

4:检测类的继承:inspect class hierarchy: o.class.superclass o.class.included_modules

5:检测自己是否拥有某个方法: o.respond_to?(“reverse”)

6:检测自己有哪些实例方法(false表示只要类自己的方法,不要继承的):o.class.instance_methods(false)

7:检测自己有哪些实例变量:o.class.instance_variables

tips:Active Record通过内省机制查看类的名字,根据类名自动的映射到对应的表(类名:驼峰命名法,表名:小写,以“_”分割),然后读取表中字段,自动定义同名的属性和相应的访问器。

打开类、猴子补丁、细化(了解)

Ruby的class关键字更像是一个作用域操作符,而不是类型声明语句。class关键字的核心任务是把你带到类的上下文中,让你可以在里面定义方法。
在Ruby中,定义一个未存在的类可以定义这个类,若定义一个存在的类,就不再定义,会打开这个类,进行这次定义中的操作。比如,可以定义String类来增加新的方法。

class String
  def to_asd
    "asd"
  end
end
a = "qwe"
puts a.to_asd
#=>asd

但若是String本身就有to_asd方法,则会覆盖掉原本的to_asd方法,导致Bug。因此这种鲁莽的修改类的方式叫做猴子补丁。
为了解决猴子补丁问题,需要用到细化refine,细化和打开类的区别在于细化不是全局性的,细化就像在原来的类上加了一块补丁,而且它会覆盖正常的方法查找,此外,细化只在程序的部分区域生效,从using语句的位置开始到模块或文件结束。

module StringExtensions
  refine String do
    def reverse
      "esrever"
    end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值