Sat*_*ish 7 ruby module metaprogramming mixins openstruct
我有一个包含模块的Ruby类.我希望include类的行为类似于OpenStruct.如何在不明确继承OpenStruct的情况下实现这一目标?
class Book
include MyModule
end
module MyModule
def self.included(klass)
# Make including class behave like OpenStruct
end
end
Run Code Online (Sandbox Code Playgroud)
代替
class Book < OpenStruct
include MyModule
end
Run Code Online (Sandbox Code Playgroud)
您可以将您的类不处理的所有方法委托给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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4504 次 |
| 最近记录: |