ruby - 制作方法的方法 : Easy Ruby Metaprogramming

标签 ruby metaprogramming

我在 View 助手中有很多这样的方法

  def background
    "#e9eaec"
  end
  def footer_link_color
    "#836448"
  end

我希望将这些方法暴露给 View ,但我更希望帮助程序更简洁一些。将哈希转换为方法(或其他东西)的最佳方法是什么?

最佳答案

module MyHelper
  {:background => "#e9eaec", :footer_link_color => "#836448"}.each do |k,v|
    define_method(k) {v}
  end
end

虽然我认为用这种简洁性来换取第一种方法的可读性不一定是个好主意。

如果你想泛化这个,你可以在Module类中添加如下方法:

class Module
  def methods_from_hash(hash)
    hash.each do |k,v|
      define_method(k) {v}
    end
  end
end

然后在您的助手中调用 methods_from_hash(:background => ...)

关于ruby - 制作方法的方法 : Easy Ruby Metaprogramming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2852826/

相关文章:

python - 覆盖实例上的特殊方法

ruby - 如何向后运行 Ruby 函数?

c - 使用 C 预处理器进行嵌套宏迭代

java - 可以执行 JavaScript 的服务器端浏览器

ruby-on-rails - Rspec - 检查数组是否具有与其他数组相同的元素,无论顺序如何

metaprogramming - 自动移植工具和可以编译成其他语言的语言

C++ 元编程为树结构分配唯一 ID

ruby - Kernel.loop 方法需要 'do' 。不允许使用分号?

ruby-on-rails - 在 Ruby 和 Redis 中匹配现场玩家的最佳策略?

ruby - 在 Ubuntu 上从源代码安装 Ruby 1.9.3