Ruby String для имени метода Ошибка: неопределенный метод `call = 'для #(NoMethodError) - PullRequest
1 голос
/ 27 февраля 2012

Я должен динамически вызывать список методов объекта obj. Я пытаюсь создать экземпляр объекта метода и затем вызвать его.

method_name (строка) - это имя метода, который может быть вызван для объекта obj.

meth=obj.method(method_name) #method_name is a string
meth.call = mod

Я получаю следующую ошибку:

неопределенный метод `call = 'для # (NoMethodError)

Я использую Sequel ORM и должен динамически сохранять ассоциации моделей. Если я напрямую вызываю method_name (когда method_name не является строкой), работает следующее

obj.method_name = mod #working

Однако, когда method_name является строкой, синтаксическая ошибка выдает следующее:

obj.send(method_name) = mod #not working

синтаксическая ошибка, неожиданное '=', ожидаемое ключевое слово_end

Так что я не могу вызывать методы из их имени в строковой форме любым из вышеперечисленных способов.

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Если метод с именем method_name принимает параметр mod, попробуйте:

obj.send(method_name, mod)

Если вы назначаете что-то, тогда method_name должно заканчиваться =.

0 голосов
/ 27 февраля 2012

Правильный синтаксис для call:

call(args, ...)

[ ref ]

(Не ставьте = после вызова, просто перечислите аргументы* разделены запятыми)

Также Метод от Ingenu также является хорошим (возможно, более подходящим) для выполнения подобных действий.

...