Передача блока функции (как показывает Боб в своем ответе) в этом случае излишня. Если вы читаете строку и распечатываете ее, все, что вам нужно, это что-то вроде:
class MyClass
def test(a)
puts a
end
end
tmp = MyClass.new
tmp.test("here")
Использование блока может работать правильно, но вы вызываете много ненужного кода и делаете неясной истинную природу вашего кода.
За исключением правильного использования блока, позвольте мне обратиться к конкретному сообщению об ошибке, которое вы видите. Когда вы говорите tmp.test do |t|
, Ruby ожидает от tmp.test
до yield
одного значения, которое он временно вызовет t
и передаст в блок (представьте, что блок - это функция, и вы передаете ей аргумент your yield
оператор как параметр). В вашем случае метод method test
не должен иметь ничего общего с yield
, поэтому сообщение "(0 для 1)" подразумевает, что он видит нулевые объекты yield
ed, когда он ожидает их увидеть. Я не знаю, что делает ваш код для test
, но проверьте и убедитесь, что test
yield
имеет ровно одно значение.