我有一组解析器,它们在逻辑上有很大不同,但具有完全相同的方法和输出。
我设计了一些主人Rake
,我很好奇我能想出什么可能导致一些意外或奇怪的行为。
基本上我的parse.rake
看起来像是:
require 'app/models/provider'
require 'config/environment.rb'
Provider.all.each do |provider|
require "lib/tasks/#{provider.name}.rb"
Kernel.const_get(provider.name).provider = provider
namespace provider.name do
task :provider_task do #Parse method
Kernel.const_get(provider.name).provider_task()
end
end
end
由于类是ruby中的常量,因此我使用Kernel.const_get
来访问varname中的类方法。我的课程看起来像(ABC.rb
):
Class ABC
cattr_accessor :provider
def self.provider_task()
#Parse and add stuff to environment
end
end
通过此设置,我可以轻松调用rake ABC:provider_task
来运行特定的解析器。此外,cattr_accessor
允许我轻松引用实际的提供者模型。想法?
答案 0 :(得分:1)
我已经使用了几个星期没有问题。在与一些同事一起回顾之后,我发现了一些以前使用类似方法而没有问题的人。只有潜在的危险是与ruby类命名冲突。