Ruby 基础+进阶 第五天

本次学习资料

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

当前类

当前类和当前对象都是一直存在的,当前对象可以用self调用,但是没有方法能获取当前类。定义一个方法,那个方法将成为当前类的一个实例方法。
一般情况下,当前对象的类就是当前类。
比如,在程序的顶层,当前对象是main,main的类就是Object,也就是当前类。在一个方法中,当前类就是当前对象的类。

class_eval方法

会在一个已存在类的上下文中执行一个块。
class_eval方法会同时修改self和当前类。

def test_class_eval(a_class)
  a_class.class_eval do
    def test; puts 'test'; end;
  end
end

test_class_eval(String)
"abc".test
#=>test

相比于class_eval,instance_eval方法只修改当前对象,当只想修改self的时候,用instance_eval,若想打开类,用class_eval。
class_exec能接受额外的代码块作为参数。

类实例变量和类变量

下面的例子中,有两个不同作用域的my_var,要注意区分,一个是类作为对象的实例变量,一个是类的实例变量,要牢记类也是对象

class MyClass
  @my_var = 1
  def self.read
    @my_var
  end
  def write(my_var)
    @my_var = my_var
  end
  def read
    @my_var
  end
end
puts MyClass.read
my_class = MyClass.new
puts my_class.read.inspect
my_class.write(2)
puts my_class.read
#=>1
<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值