Ruby:动态构建结构的成员名称?

时间:2013-07-12 07:23:34

标签: ruby-on-rails ruby

我有两个问题。

1)我需要创建一个动态结构,其成员通过数组驱动。 例如:

    members = [:a, :b]
    Config  = Struct.new(members) #=> Struct.new(:a, :b)
    FlatConfig = Struct.new(members) #=> Struct.new(:a, :b)
    config = Config.new()
    flat = FlatConfig.new()

几天之后,如果我需要在这些结构中添加另一个成员,那么我需要做的就是在该成员数组中添加一个成员(memebers = [:a,:b,:c])并且我不知道需要进一步强化代码。所以我问这个。怎么做到这一点?

2)现在我需要通过对config struct成员值进行一些操作来构建平面Struct成员的值。 例如:

    config.each{|configMember|
      result = configMember.collect{|c| someArray.collect{|s| s + '--' + y}}
      flat[":#{cofigMember}"] = result #=> Intent is to store result in same member as iterated through  config struct.
    }

如何实现(1)和(2)?

提前致谢。

1 个答案:

答案 0 :(得分:0)

对于1),请使用splat运算符:

Struct.new(*members)

我真的不明白你的第二个问题。是“如何在两个配置中访问相同的变量”?

config.members.each { |key|
  configMember = config[key]
  # do something
  flat[key] = result
}