Мне нужно знать, как передать вызываемые методы в виде массива, а затем запустить этот код внутри экземпляра класса.Как запустить параметр как метод в Ruby?
код фона (упрощенный, например):
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)
Это не работает. Я получаю там сообщение об ошибке «undefined method» action »
Как я могу это сделать?
(Если вам любопытно, почему я не использую Proc или лямбда, I был, но наш архитектор сказал, что это неправильный способ сделать это, и мне нужно сделать это путь)
Как вы его написали, это как если бы каждый из предметов попадал в массив отдельно, но это не так. Один элемент массива: oppAndQuote («Acme», «QuoteTest», «», «», «» или в упрощенной версии: putsWords («Hello»). Когда я пытаюсь это сделать, я получаю «undefined method« oppAndQuote »для main: Object». – Leelluu
подпись отправки - 'send (method_name, * args)', поэтому, если у вас есть массив '[methodname, arg1, arg2, ..., argn]', вы может передать его в 'send' для вызова метода с этими параметрами. Убедитесь, что это строка или символ, и что вы не пытаетесь вызвать фактический метод. –