0

我正在 Rake 中编写一个使用几个 3rd 方 gem 的构建脚本。其中一个 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 
4

1 回答 1

1

其中一个 gem 定义了一个名为Hash.

不,它没有。它修改了现有的Hash类。

我读到我可以::Hash用来引用核心 ruby​​ 类型

那完全是胡说八道。::Hash只是说常量查找应该从根(即Object)而不是当前范围开始。这只有在命名了两个常量Hash并且您想消除它们的歧义时才会有所帮助。但是在您的情况下,只有一个名为Hash的常量,并且 gem 正在修改该常量引用的类。

除了不使用这种糟糕的宝石之外,您无能为力。

于 2015-06-10T08:19:11.697 回答