Использование строки в качестве имени функции - PullRequest
1 голос
/ 18 мая 2009

Я должен сделать обобщенную функцию, которая используется для вызова многих других функций в зависимости от получаемых доступов. Например:

def func1

   @access = ['public','private','protected']
   for acc in @access
       @temp = "get_"+acc[1]+"_data"
   end
end

def get_public_data
end

def get_private_data
end

def get_protected_data
end

но @temp принимает его как строку и присваивает ей. Пожалуйста, помогите в этом как можно скорее.

Спасибо

Ответы [ 3 ]

3 голосов
/ 18 мая 2009

В Ruby методы на самом деле являются сообщениями. Таким образом, вы можете отправить имя сообщения, используя, да, метод send:

s = 'xyz'
i = s.send 'length'
# i = 3
2 голосов
/ 18 мая 2009
@temp = send "get_#{acc[1]}_data"

Используйте #{acc[1]} вместо "+"

0 голосов
/ 18 мая 2009

Не знаю, какой язык вы используете, но некоторые языки, то есть Perl, имеют функции eval () , которые делают то, что вы пытаетесь.

Если вы используете Perl или Python, вы можете попробовать что-то вроде

@ temp = eval ("get _" + acc 1 + "_ data")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...