Ruby作为一种完全面向对象的脚本语言,在学习的时候,当然要了解Ruby对象操作的具体方法。这样才能真正了解Ruby语言的含义。

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

Ruby对象操作方法探讨(ruby用法)  Ruby对象操作 第1张

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

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

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

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

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

self 给你定义的class添加行为

  1. classTheClass
  2. class<<self
  3. defhello
  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. classMyClass
  2. class<<self
  3. defaccessor_string(*names)
  4. names.eachdo|name|
  5. class_eval<<-EOF
  6. def#{name}
  7. @#{name}.to_s
  8. end
  9. EOF
  10. end
  11. end
  12. end
  13. definitialize
  14. @a=[1,2,3]
  15. @b=Time.now
  16. end
  17. accessor_string:a,:b
  18. end
  19. o=MyClass.new
  20. putso.a#123
  21. putso.b#FriNov21
    09:50:51+08002008

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

  1. Ruby代码
  2. moduleQuantifier
  3. defany?
  4. self.each{|x|returntrue
    ifyieldx}
  5. false
  6. end
  7. defall?
  8. self.each{|x|returnfalse
    ifnotyieldx}
  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对象操作的一些使用方法介绍。

转载请说明出处
知优网 » Ruby对象操作方法探讨(ruby用法)

发表评论

您需要后才能发表评论