예 : - 응용 프로그램이 있고 플러그인을 통해 가져올 객체를 만들고 싶다면 어떻게 작성해야합니까?플러그인을 통해 확장 가능한 루비 응용 프로그램을 작성하는 방법
나는 예를 든다 - 그것은 내가 의도 한 것처럼 작동한다; 그러나 이것이 이것에 관한 '전통적인 방식'인지 확실하지 않습니다.
Ruby에서 더 효율적이고 적절한 방법이 있습니까?
start.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')
cloud.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
플러그인이 지정한 인터페이스를 구현하는 것일뿐 아니라 기본 클래스가 없어야합니다. Ruby에서는 인터페이스를 선언 할 필요가 없습니다 (예 : Java에서와 같이). 객체가 인터페이스의 메소드에 응답하면, 객체가이를 구현합니다. – Jonah