Ruby对象操作方法探讨
创始人
2024-06-15 22:11:18
0

有些刚刚学习编程的人员见到Ruby这个词的是很,可能会很迷茫,不知道这是个什么东西。其实它是一种解释型编程语言,能够帮助我们简便的完成许多操作。比如Ruby对象操作等等。#t#

Ruby不仅可以打开一个类,而且可以打开一个对象,给这个对象添加或定制功能,而不影响其他对象:

  1. a = "hello"   
  2. b = "goodbye"   
  3. def b.upcase   
  4. gsub(/(.)(.)/)($1.upcase + $2)   
  5. end   
  6. puts a.upcase #HELLO   
  7. puts b.upcase #GoOdBye   

我们发现b.upcase方法被定制成我们自己的了。如果想给一个对象添加或定制多个功能,我们不想多个def b.method1 def b.method2这么做我们可以有更模块化的Ruby对象操作方式:

  1. b = "goodbye"   
  2. class << b   
  3. def upcase # create single method   
  4. gsub(/(.)(.)/) { $1.upcase + $2 }   
  5. end   
  6. def upcase!   
  7. gsub!(/(.)(.)/) { $1.upcase + $2 }   
  8. end   
  9. end   
  10. puts b.upcase # GoOdBye   
  11. puts b # goodbye   
  12. b.upcase!   
  13. puts b # GoOdBye   

这个class被叫做singleton class,因为这个class是针对b这个对象的。和设计模式singleton object类似,只会发生一次的东东我们叫singleton.

self 给你定义的class添加行为

  1. class TheClass   
  2. class << self   
  3. def hello   
  4. puts "hello!"   
  5. end   
  6. end   
  7. end   
  8. TheClass.hello #hello! 

 
self修改了你定义class的class,这是个很有用的技术,他可以定义class级别的helper方法,然后在这个class的其他的定义中使用。下面一个Ruby对象操作列子定义了访问函数,我们希望访问的时候把成员数据都转化成string,我们可以通过这个技术来定义一个Class-Level的方法accessor_string:

  1. class MyClass   
  2. class << self   
  3. def accessor_string(*names)   
  4. names.each do |name|   
  5. class_eval <<-EOF   
  6. def #{name}   
  7. @#{name}.to_s   
  8. end   
  9. EOF   
  10. end   
  11. end   
  12. end   
  13. def initialize   
  14. @a = [ 1, 2, 3 ]   
  15. @b = Time.now   
  16. end   
  17. accessor_string :a, :b   
  18. end   
  19. o = MyClass.new   
  20. puts o.a # 123   
  21. puts o.b # Fri Nov 21 
    09:50:51 +0800 2008  

通过extend module的Ruby对象操作给你的对象添加行为,module里面的方法变成了对象里面的实例方法:

  1. Ruby代码   
  2. module Quantifier   
  3. def any?   
  4. self.each { |x| return true 
    if yield x }   
  5. false   
  6. end   
  7. def all?   
  8. self.each { |x| return false 
    if not yield x }   
  9. true   
  10. end   
  11. end   
  12. list = [1, 2, 3, 4, 5]   
  13. list.extend(Quantifier)   
  14. flag1 = list.any? {|x| x > 5 } # false   
  15. flag2 = list.any? {|x| x >= 5 } # true   
  16. flag3 = list.all? {|x| x <= 10 } # true   
  17. flag4 = list.all? {|x| x % 2 == 0 } # false 

以上就是对Ruby对象操作的一些使用方法介绍。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...