首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hash[‘hash.key’]到Ruby键

hash[‘hash.key’]到Ruby键
EN

Stack Overflow用户
提问于 2009-11-18 10:51:03
回答 5查看 22.4K关注 0票数 45

我有一个哈希表

代码语言:javascript
复制
foo = {'bar'=>'baz'}

我想给foo.bar #=> 'baz'打电话

我的动机是将activerecord查询重写为原始sql查询(使用Model#find_by_sql)。这将返回一个以SELECT子句值作为键的散列。但是,我的现有代码依赖于object.method点表示法。我想做最小的代码重写。谢谢。

编辑:看起来Lua有这个功能:

代码语言:javascript
复制
point = { x = 10, y = 20 }   -- Create new table
print(point["x"])            -- Prints 10
print(point.x)               -- Has exactly the same meaning as line above
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-18 12:03:58

代码语言:javascript
复制
>> require 'ostruct'
=> []
>> foo = {'bar'=>'baz'}
=> {"bar"=>"baz"}
>> foo_obj = OpenStruct.new foo
=> #<OpenStruct bar="baz">
>> foo_obj.bar
=> "baz"
>>
票数 81
EN

Stack Overflow用户

发布于 2009-11-18 11:44:20

您要查找的内容名为OpenStruct。它是标准库的一部分。

票数 35
EN

Stack Overflow用户

发布于 2010-09-10 18:40:57

一个很好的解决方案:

代码语言:javascript
复制
class Hash
  def method_missing(method, *opts)
    m = method.to_s
    if self.has_key?(m)
      return self[m]
    elsif self.has_key?(m.to_sym)
      return self[m.to_sym]
    end
    super
  end
end

注意:这个实现只有一个已知的bug:

代码语言:javascript
复制
x = { 'test' => 'aValue', :test => 'bar'}
x.test # => 'aValue'

如果您更喜欢符号查找而不是字符串查找,则交换两个' If‘条件

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1753336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档