方法作为参数?

时间:2013-11-09 15:35:37

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我想编写类似这样的代码:

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'方法作为参数?我希望这是有道理的,我很乐意为你澄清。

先谢谢。

2 个答案:

答案 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内部重构它并使用某种形式的策略模式,但它可能有点过分。这实际上取决于行为的不同程度,以及它们的复杂程度。