【发布时间】:2010-09-20 01:39:32
【问题描述】:
我有一个正在开发的命令行 Ruby 应用程序,我希望它的用户提供将作为过滤器运行在部分流程上的代码。基本上,应用程序会这样做:
- 读入一些数据
- 如果指定了过滤器,则使用它来过滤数据
- 处理数据
我希望过滤过程(第 2 步)尽可能灵活。
我的想法是用户可以提供一个 Ruby 文件,该文件设置一个已知常量以指向实现我定义的接口的对象,例如:
# user's filter
class MyFilter
def do_filter(array_to_filter)
filtered_array = Array.new
# do my filtering on array_to_filter
filtered_array
end
FILTER = MyFilter.new
然后,我的应用程序代码会执行以下操作:
array_that_might_get_filtered = get_my_array()
if (options.filter_file)
require options.filter_file
array_that_might_get_filtered = FILTER.do_filter(array_that_might_get_filtered)
end
虽然这可行,但感觉很俗气,似乎应该有更好的方法来做到这一点。我还考虑过让过滤器采用将已知名称的方法添加到已知类的形式,但这似乎也不太正确。
在 Ruby 中有更好的成语吗?
【问题讨论】: