我有一个包含模块的 Ruby 类。我希望包含的类表现得像 OpenStruct。我如何在不显式继承 OpenStruct 的情况下实现这一目标?
class Book
include MyModule
end
module MyModule
def self.included(klass)
# Make including class behave like OpenStruct
end
end
代替
class Book < OpenStruct
include MyModule
end
最佳答案
您可以将您的类不处理的所有方法委托(delegate)给 OpenStruct:
require 'ostruct'
class Test_OS
def initialize
@source = OpenStruct.new
end
def method_missing(method, *args, &block)
@source.send(method, *args, &block)
end
def own_method
puts "Hi."
end
end
t = Test_OS.new
t.foo = 1
p t.foo #=> 1
t.own_method #=> Hi.
关于ruby - 我可以扩展 Ruby 类以动态地表现得像 OpenStruct 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760284/