我有一个命令行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中有更好的成语吗?