2012-05-23 3 views
0

Я знаю, что этот вопрос может показаться очень конкретным, но я пытаюсь обновить некоторые сценарии для запуска на ruby ​​1.9 и столкнулся с этой очень подобной ошибкой не один раз. Я пытаюсь запустить этот код здесь: http://x.gfax.ch/Archives/Scripts/boggle.rb, но застревают в:Ruby: «NoMethodError» после обновления до ruby ​​1.9

def Dict.to_n(ch) 
    ch[0]-'a'[0] 
end 

В ruby1.8, это генерирует случайную доску NxN Boggle затем находит и выводит все слова, которые он может найти в нем. В ruby1.9, однако, переводчик дает мне это сообщение:

boggle.rb:182:in `to_n': undefined method `-' for "a":String (NoMethodError) 

Что случилось с моим синтаксисом? (Если вам нужен файл словаря для воспроизведения со сценарием, я использую тот, который указан в нижней части этой страницы примера: http://learnruby.com/boggle/index.shtml) Спасибо заранее за любые указания.

+0

'ч [0]' возвращает строку "A", который не имеет '-' метод. Можете ли вы прояснить, что вы переходите в этот метод и что вы ожидаете, точно? – rfunduk

ответ

0

Вы можете попробовать что-то вроде этого:

def Dict.to_n(ch) 
    if ch.respond_to? :codepoints #1.9+ 
     ch.codepoints.first - 'a'.codepoints.first 
    else 
     ch[0]-'a'[0] 
    end 
    end 
+0

Большое вам спасибо! Я не знал, как передать персонажей. Теперь, чтобы заменить все массивы.to_s на .join's, чтобы исправить выход: P – rubyuser1357796

1

В Ruby 1.9 метод String#[] возвращает строку, в то время как в Ruby 1.8 возвращается числовое значение. (см. here) Вместо этого вы можете использовать String#chars.

+0

'chars' по-прежнему возвращает массив строк длиной один, [' codepoints'] (http://ruby-doc.org/core-1.9.3/String.html#method-i-codepoints), вероятно, является правильным вещь. –

Смежные вопросы