Tel*_*hus 1 ruby parameters methods
我正在编写一个库来对Ruby中的字节进行人性化处理(例如,将字节数1025转换为字符串1.1K),而我仍然坚持设计的一个元素.
该计划是Numeric使用一种humanize方法进行扩展,该方法在对数字进行调用时返回对人类友好的字符串.看着源后数::字节::人(Perl模块,我想了很多本),我决定把两个选项添加到方法:一是使用1000个字节的块和一个使用floor,而不是ceil为默认舍入功能.
为了最大限度地灵活,方法的定义使用参数的哈希,以便用户可以更改一个或两个选项.如果未传递任何参数,则使用默认哈希.这给了我这样的东西:
def humanize(params = {})
params = {:block => 1024, :r_func => lambda }.merge params
# yada yada
end
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想让用户传递一个函数作为值params[:r_func],但我无法弄清楚如何验证它是ceil或者floor.因为我无法理解这一点,所以我最终做了以下事情,感觉非常笨拙:
def humanize(params = {})
params = {:block => 1024, :r_func => 'ceil' }.merge params
if params[:r_func].eql? 'ceil'
params[:r_func] = lambda { |x| x.ceil }
elsif params[:r_func].eql? 'floor'
params[:r_func] = lambda { |x| x.floor }
else
raise BadRound, "Rounding method must be 'ceil' or 'floor'."
end
# blah blah blah
end
Run Code Online (Sandbox Code Playgroud)
如果有人知道偷看Ruby lambda包含的方法的技巧,我很乐意听到它.(我也很高兴听到任何其他设计建议.)谢谢.
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |