【问题标题】:Dynamic way to use setter and getter使用 setter 和 getter 的动态方式
【发布时间】:2012-10-11 10:51:08
【问题描述】:

您好,我的问题很简单,我有简化的代码,看起来像这样

foo = OpenStruct.new
bar = OpenStruct.new

mappings.each do |k,v|
 eval "foo.#{k} = bar.#{v}"
end

我正在尝试修复这个eval 使用而不是使用它:) 找出正确的部分,但我不知道如何分配给左边的部分。要访问 getter,您可以编写。

 bar.send(v.to_sym)
 # not to sure how to access setter for foo

我正在使用 Ruby 1.8.7,谢谢

【问题讨论】:

    标签: ruby metaprogramming accessor


    【解决方案1】:

    不确定 1.8.7,但在较新的 Ruby 中可以使用:

    foo.send("#{k}=".to_sym, bar.send(v.to_sym))
    

    此外,在较新的版本中,send 也接受字符串,因此您可以省略 .to_sym

    【讨论】:

    • 就是这样,hvala Mladene :) 是时候失去这个菜鸟评价了 :)
    • nnč ;) 不知道你用它做什么,但也许你可以放弃 OpenStruct 并使用普通哈希,有时它最终会减少麻烦。
    • 这是 big beast 的一部分,使用元数据映射通过hirb 生成 shell 表。由于hirb 的要求适用于实例,这是最优雅的解决方案。
    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多