当前位置: 首页 > 面试题库 >

在Ohm / Redis中设置动态字段

游鸣
2023-03-14
问题内容

如何为欧姆对象动态设置字段?

class OhmObj < Ohm::Model
  attribute :foo
  attribute :bar
  attribute :baz

  def add att, val
    self[att] = val
  end
end

class OtherObj

  def initialize
    @ohm_obj = OhmObj.create
  end

  def set att, val
    @ohm_obj[att] = val #doesn't work
    @ohm_obj.add(att, val) #doesn't work
  end 
end

问题答案:

中的attributeclassOhm::Model方法为命名属性定义访问器和更改器方法:

def self.attribute(name)
  define_method(name) do
    read_local(name)
  end

  define_method(:"#{name}=") do |value|
    write_local(name, value)
  end

  attributes << name unless attributes.include?(name)
end

因此,当您说时attribute :foo,您可以免费获得以下方法:

def foo         # Returns the value of foo.
def foo=(value) # Assigns a value to foo.

您可以send像这样调用mutator方法:

@ohm_obj.send((att + '=').to_sym, val)

如果您真的想说,@ohm_obj[att] = val那么可以在OhmObj课堂上添加以下内容:

def []=(att, value)
    send((att + '=').to_sym, val)
end

您可能还希望访问器版本保持对称:

def [](att)
    send(att.to_sym)
end


 类似资料:
  • cmf_set_dynamic_config($data) 功能 设置动态配置 参数 $data: array 要设置的数据,格式["cmf_default_theme"=>'simpleboot3'] 返回 boolean

  • 问题内容: 如果我想使格式化后的字符串动态可调,则可以从 至 但是,这里的字符串连接似乎很麻烦。还有其他简化方法吗? 问题答案: 您可以从参数列表中获取填充值: 您甚至可以动态插入填充值:

  • 问题内容: 我有一个带有两个表的SQL Server 2008数据库。第一个表称为Department。第二个表称为票证。这两个表的定义如下: 我正在尝试找出一种动态更新Department.TotalTickets值的方法。当添加或删除工单时,我想自动增加或减少TotalTickets的值。有人可以告诉我在SQL Server 2008上执行此操作的最佳方法吗? 谢谢 问题答案: 有多种方法可以

  • 问题内容: 我想将String放入比给定单元格宽度更长的字符串中。如何动态设置,以便可以读取整个String?这是一个例子: 在这里,您将看到将给定单元格较长的每个文本换行的代码 谢谢,但是我想根据字符串的长度动态地实现RowHeight。我想读取单元格中的整个字符串/文本。有什么建议? 我是Java初学者,这是我的第一个问题。我很高兴得到答案。 问题答案: 使用JTextArea作为呈现组件时会

  • 问题内容: 在Webfaction共享主机帐户上设置Redis数据库需要执行哪些步骤? 问题答案: 由于Webfaction服务器的特殊环境限制,安装说明并不像它们那样简单。不过,最后您将拥有一个功能齐全的Redis服务器,即使重新启动后它也可以保持运行状态。大约半年前,我通过以下步骤亲自安装了Redis,此后一直运行良好。只是警告一下,半年不是很长的时间,尤其是因为服务器没有被大量使用。 这些说

  • cmf_set_dynamic_config($data) 功能 设置动态配置 参数 $data: array 要设置的数据,格式['template' => ['cmf_default_theme' => 'default']] 返回 boolean