繁体   English   中英

使用sort_by的Ruby 1.8.7错误

[英]Ruby 1.8.7 error using sort_by

扩展geocoder gem ,我正在尝试支持Ruby版本1.8.7、1.9.2和1.9.3。

在1.9.2和1.9.3中,一切正常,但是在1.8.7中,当我尝试运行时:

hashes.sort_by{ |key, value| value }

它给我

NoMethodError: undefined method `<=>' for nil:NilClass

我的hashes数组如下所示:

[
  {"u33dc0cpnnf4j6c9vksk7zzp"=>1},
  {"u33ddph3wbe2cjnfnxe98sn0"=>1},
  {"u33616p4rb8vtm9uscy26f5b"=>1}
]

查看文档 ,似乎在源代码的任何地方都没有使用<=>作为sort_by

是什么导致此错误?

Ruby内部在排序时使用<=>进行比较。

我认为sort_by的块中存在误解:您将数组元素作为块参数,而不是哈希的键/值。 因此, value始终nil 在Ruby> = 1.9 nil <=> nil为零的情况下,对于Ruby 1.8, nil上没有<=>方法。

因此,您需要做的是sort_by调用,例如,调用以下内容:

hashes = [
  {"u33dc0cpnnf4j6c9vksk7zzp"=>1},
  {"u33ddph3wbe2cjnfnxe98sn0"=>1},
  {"u33616p4rb8vtm9uscy26f5b"=>1}
]

hashes.sort_by { |val| val.values.first }

这按每个哈希的第一个值排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM