我需要知道如何将调用的方法作为数组传递,然后在实例化的类中运行该代码。
背景代码(例如简化):
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,我 这样做,但我们的架构师说这不是正确的方法,我需要这样做。)
答案 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路径更好,但是如果你的架构师希望这样做,那么你就是这样做的。