在ruby中将字符串转换为变量名

我有变数

   

我想动态更改这些变量的值。

     # here i want to set %>  end end 

该值未分配。 有没有办法动态地为变量赋值?

我认为没有办法做到这一点。 有实例或类变量,但对于局部变量,很少需要。

在你的情况下,你真的应该有哈希数据。 此外,像这样的逻辑真的不属于erb。 你想要的东西:

 working_hour_sets = %w[mon tue wed thu fri sat sun].inject({}) do |hash, day| hash[day]=0; hash end # puts working_hour_sets #=> {"wed"=>0, "sun"=>0, "thu"=>0, "mon"=>0, "tue"=>0, "sat"=>0, "fri"=>0} working_hour_sets.each do |day, value| working_hour_sets[day] = 1 if condition? end 

现在,我知道这个问题有点陈旧,但有一种更简单的方法可以做到这一点并使用标准的Ruby send方法。 这实际上是使Ruby在元编程世界中如此敏捷的方法之一。

这实际上是我在Rails应用程序中使用的配置设置:

 # In a YAML twitter: consumer_key: 'CONSUMER-KEY' consumer_secret: 'CONSUMER-SECRET' oauth_token: 'OAUTH-KEY' oauth_token_secret: 'OAUTH-SECRET' ... # And in your file.rb config = YAML.load_file(Rails.root.join("config", "social_keys.yml"))[Rails.env]['twitter'] Twitter.configure do |twitter| config.each_key do |k| twitter.send("#{k}=", config[k]) end end 

这很干,很容易理解。 🙂

这个老问题的另一个答案。

在我的场景中,我想计算一天中出现的天数( day_array )。 我不需要知道day_array是否有一天没有显示,所以我没有像days_count在他的回答中那样初始化days_count哈希。

我是这样做的:

 def count_days(day_array) days_count = {} day_array.each do |day| days_count[day].nil? ? days_count[day] = 1 : days_count[day] = days_count[day] + 1 end puts days_count end 

如果我将上面的内容复制并粘贴到irb中,那么:

 > count_days(%w[SU MO]) {"SU"=>1, "MO"=>1} > count_days(%w[SU SU MO]) {"SU"=>2, "MO"=>1} 

基本上,与先前的答案一致。 但是,我认为另一个例子不会受到伤害。