Я иду через этот учебник: http://tutorials.jumpstartlab.com/projects/jsattend.htmlСортировка хэша с нулем в качестве ключевого
В итерации 7, шаг 3 мы получаем для сортировки хэша, называемого state_data, который имеет ноль в качестве ключа. Предлагаемое решение:
state_data = state_data.sort_by{|state, counter| state unless state.nil?}
К сожалению, это не работает на рубин 1.9.2p290 (2011-07-09 пересмотра 32553) [x86_64-darwin11.0.0]. Например:
~% irb
>> things = { nil => "a", 2 => "b", 3 => "c" }
>> things.sort_by { |k, v| k unless k.nil? }
ArgumentError: comparison of NilClass with 2 failed
from (irb):6:in `sort_by'
from (irb):6
from /Users/jacopo/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'
То же самое с эквивалентом:
>> things.sort_by { |k, v| k if k }
ArgumentError: comparison of NilClass with 2 failed
from (irb):3:in `sort_by'
from (irb):3
from /Users/jacopo/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'
В случае обучающей программы, так как это сортировка по коду состояния двух букв, возможное решение:
state_data = state_data.sort_by{|state, counter| state.nil? ? "ZZ" : state }
который явно взломан.
Что такое Ruby-способ справиться с этим?
Я думаю, что есть немного запаха кода, если я получил нуль как хэш-ключ. Я бы хотел исправить это. –