Можно ли использовать «eval» для определения только одной функции (в отличие от одной для каждой)? - PullRequest
2 голосов
/ 26 августа 2010

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

Из приведенного ниже кода вы видите, что я определяю такие функции, как get_stats, get_fans для определения точной переменной.

Мой вопрос: можно ли определить только одну функцию?

ТЕПЕРЬ:

REQ={:USER_STATS_IN_NETWORK =>1 ,
     :FANS_IN_NETWORK => 2}


USER_STATS_IN_NETWORK_TYPE_ID =REQ[:USER_STATS_IN_NETWORK]
get_stats= some_function(params,USER_STATS_IN_NETWORK_TYPE_ID)


FANS_IN_NETWORK_TYPE_ID = REQ=[:FANS_IN_NETWORK_TYPE_ID]
get_fans= some_function(params,FANS_IN_NETWORK_TYPE_ID)

repeat for 10-over times...

** ХОЧУ ДОСТИГАТЬ: **

REQ={:USER_STATS_IN_NETWORK =>1 ,
     :FANS_IN_NETWORK => 2}

#get_* => return some_function(:*) , without defining all of them explicitly
#example: get_user_stats => returns some_function(:USER_STATS_IN_NETWORK)

1 Ответ

2 голосов
/ 26 августа 2010

Вы можете попробовать что-то вроде этого:

REQ.keys.each do |key|
  self.class.send(:define_method, "get_#{key.to_s.sub(/_IN_NETWORK$/, '').downcase}") do
    some_function(key)
  end
end
...