例如 - 如果我有一个应用程序并且我想创建一个将通过插件导入的对象,我将如何编写它?
我已经整理了一个例子 - 它按我的意图工作;但是我不确定这是否是“传统”的方式。
在 Ruby 中是否有更有效或更正确的方法来执行此操作?
开始.rb
require './cloud.rb'
dir = 'plugins'
$LOAD_PATH.unshift(dir)
Dir[File.join(dir, "*.rb")].each {|file| require File.basename(file) }
mycloud = CloudProvider.descendants.first.new
mycloud.say('testing')
云.rb
class CloudProvider
def self.descendants
ObjectSpace.each_object(Class).select { |asdf| asdf < self }
end
end
插件/aws.rb
# This one inside plugins/
class AWS < CloudProvider
def initialize
end
def say(val)
puts val
end
end