Ruby method_missing参数

时间:2015-10-19 18:05:44

标签: ruby

我有这堂课:

class Mock

    attr_accessor :implementations

    def initialize()
        @implementations = Array.new
    end

    def method_missing(method_name, *arguments, &block)
        implementation = findImplementation(method_name, arguments)
        if implementation.nil?
            raise "Undefined method #{method_name}."
        else
            puts "Implemented Method!"
        end
    end

    def implement_method(method_name, parameters, return_value)
        @implementations.unshift(Implementation.new(method_name, parameters, return_value))
        @method_to_mock = nil
        @parameter = nil
        @return_value = nil
    end

    def findImplementation(method_name, args)
        return @implementations.find { |i| i.method_name == method_name && i.parameters == args }
    end

end

如果我做:

m = Mock.new
m.implement_method(:something, 10, true)
m.findImplementation(:something, 10) 

它返回我在第二行添加的实现。但是当我这样做时:

m.something(10)

输出"未定义的方法"。显然我在method_missing方法中调用的findImplementation调用返回nil。我做错了什么?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是将参数作为数组传递。 (无论如何你会如何处理多个参数?)

因此,您的代码变为

m = Mock.new
m.implement_method(:something, [10], true)
m.findImplementation(:something, [10])