WEB开发网
开发学院软件开发Java 轻量级开发的成功秘诀,第 7 部分: Java 替代方案... 阅读

轻量级开发的成功秘诀,第 7 部分: Java 替代方案

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: 反射反射(Reflection) 是使用 API 找到给定对象基本构建块的能力,在 Ruby 中,轻量级开发的成功秘诀,第 7 部分: Java 替代方案(5),反射是很容易的,一切都是对象,因为 Ruby 允许在运行时在类或对象上面修改方法,可以简单地重命名一个现有的方法并且以旧名字插入一个新

反射

反射(Reflection) 是使用 API 找到给定对象基本构建块的能力。在 Ruby 中,反射是很容易的。一切都是对象,一切都是类。可以向任何类询问它的类、它的父类或它所支持的方法。例如,可以使用代码来向数字 4 询问它的类和它所支持的方法:

irb(main):001:0> 4.class 
=> Fixnum 
irb(main):002:0> 4.methods 
=> ["%", "between?", "send", "<<", "prec", "modulo", "&", 
"object_id", ">>", "zero?", "size", "singleton_methods", 
"__send__", "equal?", "taint", "id2name", "...and so on. 

在 Ruby 中,使用反射结果是容易的。为了在一个对象上调用 to_s(转换为字符串)方法,只需发送一个字符串给它:

irb(main):003:0> meth="to_s" 
=> "to_s" 
irb(main):004:0> i=4 
=> 4 
irb(main):005:0> i.send meth 
=> "4" 

嗯,您可以看到简化的反射。为使事情更加容易,不需要担心原语或枚举、数组或泛型的特殊情况。这是纯自然的面向对象的天堂。Java 的例子比较繁琐。但它们是必须的,因为需要用反射来取得更好的透明性。

Ruby 在另一个地方很吸引人。在 Ruby 中,能够挂到一个对象的任何部分。例如,拦截器很容易实现。因为 Ruby 允许在运行时在类或对象上面修改方法,可以简单地重命名一个现有的方法并且以旧名字插入一个新的方法。以下的极端例子拦截 Class 类里的新方法,它基于 Dave Thomas 的 Programming Ruby 一书中的一个例子:

class Class 
 alias_method :original_new, :new 
 def new(*args) 
  result = original_new(*args) 
  print "Interceptor on Class.new " 
  return result 
 end 
end 

上一页  1 2 3 4 5 6  下一页

Tags:轻量级 开发 成功

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接