Ruby:在另一种方法中定义一个方法有什么实际用途?
发布时间:2020-12-16 20:09:52 所属栏目:百科 来源:网络整理
导读:我正在阅读有关元编程的文章,并且表明您可以在另一种方法中定义一种方法.这是我曾经知道的一段时间,但这让我问自己一个问题:这有什么实际应用吗?在方法中定义方法有什么现实生活中的用途? 例如: def outer_method def inner_method # ... end # ... end
我正在阅读有关元编程的文章,并且表明您可以在另一种方法中定义一种方法.这是我曾经知道的一段时间,但这让我问自己一个问题:这有什么实际应用吗?在方法中定义方法有什么现实生活中的用途?
例如: def outer_method def inner_method # ... end # ... end 解决方法
我最喜欢的metaprogramming示例是动态构建一个方法,然后您将在循环中使用.例如,我有一个我在Ruby中编写的查询引擎,其中一个操作是过滤.有一堆不同形式的过滤器(substring,equals,< =,> =,交集等).天真的做法是这样的:
def process_filter(working_set,filter_type,filter_value) working_set.select do |item| case filter_spec when "substring" item.include?(filter_value) when "equals" item == filter_value when "<=" item <= filter_value ... end end end 但是,如果您的工作集可以变大,那么每个操作都要执行1000秒或1000000次这样的大案例声明,即使每次操作都需要相同的分支.在我的情况下,逻辑比只是一个case语句更多的涉及,所以开销更加糟糕.相反,你可以这样做: def process_filter(working_set,filter_value) case filter_spec when "substring" def do_filter(item,filter_value) item.include?(filter_value) end when "equals" def do_filter(item,filter_value) item == filter_value end when "<=" def do_filter(item,filter_value) item <= filter_value end ... end working_set.select {|item| do_filter(item,filter_value)} end 现在,一次性分支完成一次,在前面,结果的单用途功能是内循环中使用的一个功能. 实际上,我的真实例子有三个层次,因为工作集和过滤器值的解释都有差异,而不仅仅是实际测试的形式.所以我建立一个item-prep函数和一个filter-value-prep函数,然后构建一个使用这些函数的do_filter函数. (我实际上使用羔羊,不是defs.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 使用Enum.Parse()时出现意外结果
- c – 当父类共享指针是返回类型时返回新的基类
- C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区
- ajax 读取json数据
- ruby-on-rails – 如何在rails中将对象从一个控制器传递到另
- 解决vue router组件状态刷新消失的问题
- vue分类页开发--axios数据获取,localstorage数据缓存
- Day13持久化存储——SQLite数据库存储
- c – inplace_merge:N * log(N)与N-1复杂性的原因是什么?
- Oracle 11g必须开启的服务及服务详细介绍