我想编写类似这样的代码:
move = Exit.new(exit_type)
move.scan(person)
move.scan(person)
number_of_people = move.total
超过3人退出'exit_type'时,会删除一个人, 因此,如果1或2人退出则保持不变,但如果从总人数中移除3人或3人以上。
我如何在Exit类初始化方法中编写'exit_type'方法作为参数?我希望这是有道理的,我很乐意为你澄清。
先谢谢。
答案 0 :(得分:1)
我想用exit_type
来改变扫描成员函数的性质class Exit
attr_accessor :exit_type
def initialize(exit_type = nil)
@extit_type = exit_type
end
def scan(person)
send(@exit_type || :default_exit_type_handler)
end
def default_exit_type_handler
#your code
end
def exit_type_1
#your code
end
现在您可以将退出对象初始化为 move = Exit.new(:exit_type_1)
答案 1 :(得分:1)
我不是100%确定我理解这些要求,但这可能只是因为命名不佳。
我的第一次旋转只会消除调用者理解实现细节的需要,例如,
mover = Exit.remove_only_after(3)
在内部,Exit
将使用符号或可以在scan
方法中检查的任何内容构造实例。这样,您只需要知道所需的行为,而不是实际实现该行为的方法名称,符号或其他内容。
根据实际需要,我可能会在Exit
内部重构它并使用某种形式的策略模式,但它可能有点过分。这实际上取决于行为的不同程度,以及它们的复杂程度。