Ruby编程之类用instance_eval创建类的singleton_method

文章展示了在Ruby中如何定义一个Person类,包括属性访问器的使用如attr_accessor、attr_reader和attr_writer,以及模块Klass的定义和扩展。通过实例方法greeting的实现,展示了instance_eval的用法,并探讨了对象复制(dup)和继承(extend)的概念。此外,还比较了对象与类及模块的相等性。
摘要由CSDN通过智能技术生成
class Person
  attr :sex
  attr_reader :name
  attr_writer :name
  attr_writer :sex
  attr_accessor :facebook
  def greeting
    "Hello #{@facebook}"
  end
  private
  attr :occupation
  attr_accessor :occupation
end
module Klass
  def greeting
    "Hello from Klass.\n"
  end
end
person = Person.new
person.name = "Dennis"
person.sex = "male"
person.instance_eval do
  def fool_i
    puts ("Hello instance_eval foo_i")
  end
end
puts(person.singleton_methods)
puts("person对象的复制:")
puts(person.dup.instance_variables)
puts("person对象继承:")
puts(person.extend(Klass).greeting)
puts("person对象与模块Klass对象类相等么?")
puts(person.eql?Klass)
puts("person对象与自身类person相等么?")
puts(person.eql?person)
fool_i
person对象的复制:
@name
@sex
person对象继承:
Hello from Klass.
person对象与模块Klass对象类相等么?
false
person对象与自身类person相等么?
true

开发工具:RubyMine 2022.2.1
参考文献:https://ruby-china.org/topics/25739

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值