Ruby每周一测 - [url=http://rubyquiz.com/]Ruby Quiz[/url] 是Ruby Talk邮件列表上的一个持续了很长时间活动,每周有一个小题目被提出来,然后大家进行解答讨论。Amazon上还有相关的书: [url=http://www.amazon.com/Best-Ruby-Quiz-Pragmatic-Programmers/dp/0976694077]Best of Ruby Quiz[/url]。我尝试挑选其中的一些题目进行翻译,做一个每周一测系列,欢迎大家参与讨论。
-----题目分割线-----
命令行操作通常都会支持缩写,这周的Ruby Quiz要实现一个支持方法名缩写调用机制,举具体例子来看,假设一个Mine对象有step, next, stop, exit 4个方法,我们用abbrev操作定义这4个方法可以被缩写调用:
如下调用将会产生:
一个需要留意的地方,缩写方法不能调用其他缩写:
针对这些特殊情况的测试,原文提供了一个完整的[url=http://rubyquiz.com/test-abbrev.rb]单元测试[/url]代码。
-----解答分割线-----
原题和一些解法在这里:[url]http://rubyquiz.com/quiz110.html[/url]
-----题目分割线-----
命令行操作通常都会支持缩写,这周的Ruby Quiz要实现一个支持方法名缩写调用机制,举具体例子来看,假设一个Mine对象有step, next, stop, exit 4个方法,我们用abbrev操作定义这4个方法可以被缩写调用:
class Mine
abbrev :step, :next, :stop
abbrev :exit
end
如下调用将会产生:
Mine.new.e # 调用exit方法
Mine.new.st # 因为step和stop都符合st这个缩写,应该抛出错误提醒用户
Mine.new.a # 应该抛出NoMethodError错误
一个需要留意的地方,缩写方法不能调用其他缩写:
class Nine
abbrev :hash
abbrev :has
end
Nine.new.ha # => [:hash, :has]
Nine.new.has # => 不能调用hash方法,应该抛出NoMethodError错误
class Nine
def has; 42; end
end
Nine.new.has # => 这个时候应该返回42
针对这些特殊情况的测试,原文提供了一个完整的[url=http://rubyquiz.com/test-abbrev.rb]单元测试[/url]代码。
-----解答分割线-----
原题和一些解法在这里:[url]http://rubyquiz.com/quiz110.html[/url]