Ruby每周一测 - 方法名缩写调用

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个方法可以被缩写调用:

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值