如何在Ruby中运行参数作为方法?

时间:2014-02-03 19:45:10

标签: ruby watir

我需要知道如何将调用的方法作为数组传递,然后在实例化的类中运行该代码。

背景代码(例如简化):

class API
    def putsWords(myWords)
        puts myWords
    end

 end

class TestAssert
    def multiply(num1, num2)
        puts (num1 * num2)
    end
end

(在现实世界中,API和TestAssert是使用和组合命令以通过Watir与网页交互的数百行方法。)

我现在无法开始工作:

require_relative 'API'
require_relative 'Asserts'
require_relative 'LoggingIn'

class Step

    def initialize(actionArray, checkArray=nil)
        @interact = API.new
        asserting = TestAssert.new
        actionArray.each do |action|
            @interact.action
        end
        checkArray.each do |check|
            @asserting.check
        end 
    end 
end 

@myActionArray = Array.new

@myActionArray << putsWords("Hello")
    @myActionArray << putsWords("World")


@myAssertArray = Array.new

@myAssertArray << multiply(7, 3)


step1 = Step.new(@myActionArray, @myAssertArray)

这不起作用。我得到错误消息“未定义方法'动作'”

我该如何做到这一点?

(如果你很好奇为什么我不使用Proc或lambda,我 这样做,但我们的架构师说这不是正确的方法,我需要这样做。)

1 个答案:

答案 0 :(得分:2)

您需要使用send向对象发送任意消息,并更改输入数组:

@myActionArray = Array.new
@myActionArray << ["oppAndQuote", "Acme", "QuoteTest", "", "", ""]


@myAssertArray = Array.new
@myAssertArray << ["assertOnPage", "QuoteTest", "didnt work"]

然后你可以使用send并将数组展开到参数列表中:

@interact.send(*action)
...
@asserting.send(*check)

坦率地说,我认为lambda路径更好,但是如果你的架构师希望这样做,那么你就是这样做的。

相关问题