Ruby 命名数组方法';到散列';原因';堆栈级别太深';错误

Ruby 命名数组方法';到散列';原因';堆栈级别太深';错误,ruby,Ruby,我试图创建一个“to_hash”数组方法,但不断出现“stack level too deep”错误: class Array def to_hash Hash[self.each_index.zip(self)] end end puts [50, 49, 53, 44].to_hash # SystemStackError: stack level too deep 我最终发现方法名“to_hash”是问题的根源。只需将其更改为“to_hsh”即可使其按预期工作: cl

我试图创建一个“to_hash”数组方法,但不断出现“stack level too deep”错误:

class Array
  def to_hash
    Hash[self.each_index.zip(self)]
  end
end

puts [50, 49, 53, 44].to_hash

# SystemStackError: stack level too deep
我最终发现方法名“to_hash”是问题的根源。只需将其更改为“to_hsh”即可使其按预期工作:

class Array
  def to_hsh
    Hash[self.each_index.zip(self)]
  end
end

puts [50, 49, 53, 44].to_hsh

# => {0=>50, 1=>49, 2=>53, 3=>44}
如果我尝试在数组上调用“to_hash”方法(而不编写自己的方法),我会得到:

NoMethodError:[50,49,53,44]:数组的未定义方法“to_hash”

所以,如果数组没有内置的“to_hash”方法,为什么我将自己的数组方法命名为“to_hash”会出现问题?

因为该方法调用
to_hash
。这将导致递归调用

文件说:

通过调用arg.to_Hash将arg转换为哈希。arg为nil或[]时返回空哈希


Hash[self.each_index.zip(self)]
行中,
self.each_index.zip(self)
生成一个数组,在该数组上
Kernel#Hash
调用
。现在,这个
to_hash
成为您的自定义
to_hash
方法,这是一个递归调用,并产生错误,原因是堆栈级别太深(SystemStackError)

“医生,我这样做会很痛”-“所以不要这样做”。你为什么这么想?只是想弄明白。啊,谢谢你的解释!我只是重写了“to_hash”方法,没有使用hash[],而且确实有效。