下面是一个说明如何通过调用该类以外的方法向类中添加行为的类。您需要将方法定义替换为具有状态机代码的方法定义。
#!/usr/bin/env ruby
module ModifyClass
def self.add_foo_class_method(klass)
class << klass
def foo
puts 'I am foo.'
end
end
end
end
class C
ModifyClass.add_foo_class_method(self)
end
C.foo # => "I am foo."
要翻译这更给你的背景下,我认为这可能是这个样子:
module StateMachineAdder
def self.add(klass)
class << klass
# state_machine ...
end
end
end
class MyModel_1
StateMachineAdder.add(self)
end
class MyModel_2
StateMachineAdder.add(self)
end
或者,你可以在一个类中的公共行为(如呼叫定义类定义中的state_machine以及两个模型中包含相同或基本相同行为的方法),然后让您的2个模型继承该类。这可能是最简单的解决方案。例如:
class XyzModelBase
state_machine ...
# Any methods common to both base classes can go here
def foo
# ...
end
end
class XyzModelFoo < XyzModelBase
# ...
end
class XyzModelBar < XyzModelBase
# ...
end
#
你的意思是你想要2个模型共享相同的状态机*定义*,或共享相同的*定义和相同的状态*? –
相同定义。 –