[英]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.