草庐IT

hash_instance

全部标签

ruby - 类型错误 : no implicit conversion of Hash into String

尝试解析一些JSON,为什么text是空的?期望的输出:text应该返回Helloworld\n\nApple,Harbor\n\nBanana,Kitchen\n\nMango,Bedroomtext="Helloworld"json='{"fruits":[{"name":"Apple","location":"Harbor"},{"name":"Banana","location":"Kitchen"},{"name":"Mango","location":"Bedroom"}]}'fruits=JSON.parse(json)defformat_fruits(fruits)fr

ruby - 为什么即使在 Hash 上调用 Enumerable#find/#detect 也会返回一个数组?

documentationforEnumerable#find/#detect说:find(ifnone=nil){|obj|block}→objornilfind(ifnone=nil)→an_enumeratorPasseseachentryinenumtoblock.Returnsthefirstforwhichblockisnotfalse.Ifnoobjectmatches,callsifnoneandreturnsitsresultwhenitisspecified,orreturnsnilotherwise.但是在Hash上调用时,结果已经将类型改为Array,而不是原来

ruby : how to prevent modification of an array instance variable through an attribute reader

抱歉这个菜鸟问题...假设我们有:classTestMeattr_reader:arraydefinitialize@array=(1..10).to_aend结束然后可以这样做:>>a=TestMe.new=>#>>a.array.map!&:to_s=>["1","2","3","4","5","6","7","8","9","10"]>>a.array=>["1","2","3","4","5","6","7","8","9","10"]这显然不利于封装,不是吗?有什么方法可以快速保护数组变量不被更改吗?...或者每当我的实例变量具有“破坏性”方法时,我是否需要实现一个深拷贝读取

ruby-on-rails - rails : encoding woes with serialized hashes despite UTF8

我刚刚从ruby​​1.9.2更新到ruby​​1.9.3p0(2011-10-30修订版33570)。我的Rails应用程序使用postgresql作为其数据库后端。系统区域设置为UTF8,数据库编码也是如此。Rails应用程序的默认编码也是UTF8。我有中国用户输入汉字和英文字符。字符串存储为UTF8编码字符串。rails版本:3.0.9自更新以来,数据库中的一些现有中文字符串不再正确显示。这不会影响所有字符串,只会影响那些属于序列化哈希的字符串。存储为普通字符串的所有其他字符串看起来仍然是正确的。示例:这是一个序列化的散列,在数据库中存储为UTF8字符串:broken="---!

ruby - 将元素插入 ruby​​ Hash 中的数组

在Ruby中,为了创建数组的散列并将元素推送到这些数组,我见过两种习惯用法。我想知道人们更喜欢哪一个,为什么。(披露:我有自己的看法,但我想确保我没有遗漏一些明显的东西。)方法1:使用Hash的花式初始化器:ht=Hash.new{|h,k|h[k]=[]}ht["cats"]当您使用尚不存在的键访问ht时,此方法会创建一个空数组。方法2:简单的初始化器,花哨的访问器:ht={}(ht["cats"]||=[])人们对哪一个更好(或者哪一个优于另一个)有意见吗? 最佳答案 有时散列最初是用数据填充的,后来它只用于检索数据。在那些情况

ruby - "Hash.new(0)"和 "{}"有什么区别

我的代码出现了(对我而言)意外行为,因此我尝试在REPL中隔离问题。然而,这些构造函数似乎都具有相同的结果(空散列):irb>a={}#=>{}irb>b=Hash.new(0)#=>{}不过,当我将{}传递给reduce函数时,我得到了一个NoMethodError。这两个构造函数有什么区别?irb>arr="counttheoccuranceofeachofthewords".scan(/\w+/)#=>["count","the","occurance","of","each","of","the","words"]irb>x=arr.reduce(Hash.new(0)){|h

ruby - 为什么 instance_eval 对 Proc 成功但对 Lambda 不成功?

我有以下类(class):classUsercode1=Proc.new{}code2=lambda{}define_method:testdoself.class.instance_eval&code1self.class.instance_eval&code2endendUser.new.test为什么第二个instance_eval失败并出现错误数量的参数(1代表0)错误? 最佳答案 instance_eval正在将self(User)生成给lambda。Lambda对其参数有特殊要求-方法也是如此-如果参数太少/太多,将引发

ruby - 如何反转 Hash.inspect 或 Array.inspect? (又名 .to_s)在 Ruby 中

我在Ruby1.9中通过调用等于my_hash.inspect的my_hash.to_s不小心将Ruby哈希保存到字符串。这给了我这样的字符串:'{"foo"=>{"bar"=>"baz","qux"=>"quux"}'我现在想将其还原为散列。这是怎么做到的?我不是在寻找其他序列化技术的解释,我知道它们。我只需要一种方法来恢复它,这样我就可以以正确的方式保存它。 最佳答案 最快的答案是:eval。my_hash=eval(my_str_hash) 关于ruby-如何反转Hash.insp

ruby - Rspec any_instance.stub 为 nil :NilClass exception 引发未定义的方法 `any_instance_recorder_for'

这是我正在测试的包含在Foo.rb中的类:classFoodefbarreturn2endend这是Foo_spec.rb中包含的我的测试:require"./Foo.rb"describe"Foo"dobefore(:all)doputs"#{Foo==nil}"Foo.any_instance.stub(:bar).and_return(1)endit"shouldpassthis"dof=Foo.newf.bar.shouldeq1endend我得到以下输出:falseFFailures:1)FooShouldpassthisFailure/Error:Foo.any_insta

ruby - 比较相等的字符串在 Hash 中找不到相同的对象

我有两个看起来相等的字符串:context="MarriottInternationalWorld’sMostADMIREDLodgingCompanybyFORTUNEfor14thyr.via@FortuneMagazinehttp://cnnmon.ie/1kcFZSQ"slice_str=context.slice(105,24)#=>"http://cnnmon.ie/1kcFZSQ"str="http://cnnmon.ie/1kcFZSQ"slice_str==str#=>trueslice_str.eql?str#=>true但是当我在以字符串为键的散列中查找值时,它们