- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个正在开发的命令行 Ruby 应用程序,我想允许它的用户提供将在部分过程中作为过滤器运行的代码。基本上,应用程序是这样做的:
我希望过滤过程(第 2 步)尽可能灵活。
我的想法是,用户可以提供一个 Ruby 文件,该文件设置一个已知常量以指向实现我定义的接口(interface)的对象,例如:
# 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 中有更好的习惯用法吗?
最佳答案
我只是结合使用命令行和约定。
If a filter is specified, use it to filter data
我假设您会在命令行中指定一个过滤器?那么您会像这样调用应用程序吗?
ruby dataprocessor.rb custom_filter
如果是这样,您可以定义一个“api”,其中类名必须与传入的内容相匹配 - 几乎与您在示例中描述的完全相同。
为了更进一步,您可以使用一些逻辑来使用 ruby 的 defined?
查找 CustomFilter
类,如果找不到,则继续查找对于 custom_filter.rb
(或任何合适的变体)并尝试加载该文件,然后重试。
这为您提供了极大的可扩展性,因为您可以编写任意多的过滤器类,将它们放在它们自己的 .rb 文件中,并将它们放在 ruby 可以找到它们的任何地方。您也不必有预定义的常量,唯一的限制是
do_filter
方法顺便说一句,这与 rails 为 require 模型所做的非常相似,这就是为什么您可以只使用 SomeModel
而不必总是执行 require app/models/some_model
首先 :-)`
关于ruby - 编写一个 ruby 命令行应用程序;最好的方法是做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/251444/
我是一名优秀的程序员,十分优秀!