是否可以使用“eval”来定义一个函数(而不是每个函数一个)?

时间:2010-08-26 08:36:01

标签: ruby-on-rails ruby refactoring eval

今天,我在散列中定义了一组变量,我在整个模型和控制器中使用各种函数。

从下面的代码中,您可以看到我定义了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 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

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