我在Rake中编写了一个使用几个第三方宝石的构建脚本。其中一个gem定义了一个名为Hash
的类。
class Hash
alias hkeys keys
def keys
hkeys.sort {|a,b| a.to_s <=> b.to_s }
end
def each
keys.each { |k| yield k, self[k] }
end
end
这打破了枚举,导致no block given (yield) (LocalJumpError)
。我读到我可以使用::Hash
来引用核心ruby类型,但是如何使用
bucket.objects.each do |obj|
puts "#{obj.key} => #{obj.etag}"
end
答案 0 :(得分:1)
其中一个gem定义了一个名为
Hash
的类。
不,它没有。它修改了现有的Hash
类。
我读到我可以使用
::Hash
来引用核心ruby类型
这完全是胡说八道。 ::Hash
只是说常量查找应该从根(即Object
)而不是当前范围开始。只有当两个常量命名为Hash
并且您想消除歧义时,这才有用。但在你的情况下,只有一个常量名为Hash
,而gem正在修改该常量引用的类。
除了不要使用这些蹩脚的宝石外,你根本无能为力。