没有Rails Java程序员如何使用Ruby
http://tech.ddvip.com 2008年01月18日 社区交流
内容摘要:Ruby on Rails仅是使Ruby成为伟大的一个因素,这就象EJB仅是Java企业平台的一个组成部分一样。本文将带你一同讨论,作为一名Java开发者,仅利用Ruby自身所能够实现的功能。
列表15.功能强大的多态性
private boolean applyFilters(final String value, final Filter[] filters){
boolean passed = false;
for(int x = 0; (x < filters.length && !passed); x++){
passed = filters[x].applyFilter(value);
}
return passed;
}
(二) Ruby中的多态性
在Ruby中,虽然没有接口,但是只要方法名匹配,你就可以使用多态性。
在列表16中,我用Ruby重建了一个Java的Filter类型。注意,每个类都没有联系(除了它们共享相同的方法apply_filter外)。的确,在实际开发中,应该为这两个类创建一个基类Filter;然而,在此,我想展示在没有类共享的情况下的多态性问题。
列表16.Ruby中的过滤实现
class RegexFilter
attr_reader :fltr_exprs
def initialize(fltr_exprs)
@fltr_exprs = fltr_exprs
end
def apply_filter(value)
value =~ @fltr_exprs
end
end
class SimpleFilter
attr_reader :fltr_exprs
def initialize(fltr_exprs)
@fltr_exprs = fltr_exprs
end
def apply_filter(value)
value.include?(@fltr_exprs)
end
end
注意,在列表16中,我可以通过RegexFilter的apply_filter()方法(经由=~语法)创建一个正规表达式匹配器。(如果你是一位Groovy用户,那么你现在应该很高兴,因为列表16展示了Groovy是如何深深地影响Ruby的)。
十二、使用duck typing
在列表17中,我使用了Ruby的Test::Unit(它象Java的JUnit一样)来展示duck typing的具体使用。顺便说一下,在Ruby中实现自动化测试就象扩展Test::Unit和添加开始测试的方法一样容易。非常类似于JUnit,对不对?
责编:豆豆技术应用