Ruby元编程-学习笔记(四)-类定义

本文详细介绍了Ruby中的类定义,包括当前类、class_eval()、类实例变量、类变量、单件方法、Eigenclass、类宏、方法别名以及环绕别名等概念。class_eval()在类上下文中执行代码,而单件方法只针对单个对象有效。Eigenclass是对象特有的隐藏类,用于存放对象的单件方法。Ruby的attr_*()方法家族提供了一种定义访问器的类宏方式,而alias关键字可以为方法创建别名。
摘要由CSDN通过智能技术生成

类定义

在类或模块定义时,其自身充当了当前对象self的角色,类和模块也都是对象,与方法和块相同,类定义也会返回最后一条语句的值.

class MyClass
    puts "Hello"
end

=> Hello

当前类

尽管self可以获得当前对象,但并不能获得当前类,每当通过class关键字打开一个类时,这个类就成为当前类.

class MyClass
    # 现在当前类是MyClass
    def my_method
        # my_method是MyClass的一个实例方法
    end
end

class关键字必须指定类名才可以打开类,对于未知类名就可以修改当前类,可以使用class_eval().

class_eval()

Module#class_eval()方法会在一个已存在类的上下文中执行一个块.

def add_method_to(a_class)
    a_class.class_eval do
        def my_method do
            "Hello!"
        end
    end
end

add_method_to String
"str".my_method         # => "Hello!"

class_eval()方法与instance_eval()方法并不相同, instance_eval()方法仅会修改self(特定情况下也会修改当前类),而\calss_eval()方法会同时修改self和当前类.
对于二者的选择,若只想打开一个对象,并不在乎是不是类,使用instance_eval更好;而若是希望打开类,则使用class_eval()更好.

类实例变量

由于类是Class的实例,类名是常量,故而当self由当前类充当时所定义的变量即为类实例变量.

<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值