我有一个OpenStruct对象,需要转换为JSON数据。示例哈希(来自RSPEC助手):deftest_order{"id":505311428702,"email":"test@gmail.com","closed_at":"","discount_codes":{"id":507328175,"text":"test"}}end我正在使用下面的递归函数:defto_recursive_ostruct(hash)OpenStruct.new(hash.each_with_object({})do|(key,val),memo|memo[key]=val.is_a?(Hash)?to
我有一些Ruby代码如下:ruby版本:1.8.7hash=OpenStruct.new(:id=>123,:name=>'wenbo')puts"#{hash.id}--#{hash.name}"D:/workspace/wmch/rubytest/lib/variable.rb:17:warning:Object#idwillbedeprecated;useObject#object_id27556896--wenbo有人可以帮助我如何获取123的id字段值吗? 最佳答案 这个问题在这个blogpost中得到了回答用这行简单的代
如何使用OpenStruct的marshal_load实用程序?它似乎没有按预期工作。文档给出thisexample,但它似乎不起作用。require'ostruct'event=OpenStruct.newhash={'time'=>Time.now,'title'=>'BirthdayParty'}event.marshal_load(hash)event.title#=>nil如果不是这种方式,我如何将散列加载到OpenStruct中(不使用构造函数)?对于上下文:我正在从YAML文件中加载哈希并将其加载到OpenStruct子类的现有实例中。 最佳答
我有一个散列传递给OpenStruct为了让它成为一个.的词.这非常有效。但是每当我尝试访问一个不存在的key时undefinedmethodfor#(NoMethodError)被提出。我怎样才能让它返回nil?如果我用原始哈希尝试同样的事情,我会得到nil但不是OpenStruct!!程序片段:TXT_HASH=load_data("test.txt")ppTXT_HASH[:ftp][:lastname]##printnilaslastnamedoesnotexistTXT=OpenStruct.new(TXT_HASH)ppTXT.ftp.lastname##raisesNoM
我想使用OpenStruct将散列转换为对象具有id属性,但是生成的object#id返回native对象ID,例如test=OpenStruct.new({:id=>666})test.id#=>70262018230400有没有办法覆盖这个?目前我的解决方法还不是很好。 最佳答案 OpenStruct在unlessself.respond_to?(name)检查和method_missing中结合使用define_method调用>。这意味着如果属性名称与对象上任何现有方法的名称冲突,那么您将遇到此问题。tokland's回答是
我有一个包含模块的Ruby类。我希望包含的类表现得像OpenStruct。我如何在不显式继承OpenStruct的情况下实现这一目标?classBookincludeMyModuleendmoduleMyModuledefself.included(klass)#MakeincludingclassbehavelikeOpenStructendend代替classBook 最佳答案 您可以将您的类不处理的所有方法委托(delegate)给OpenStruct:require'ostruct'classTest_OSdefinitia