2012-05-23 1 views
0

이 질문은 매우 구체적인 것처럼 보일 수 있지만 루비 1.9에서 실행되도록 스크립트를 업데이트하려고하고 있는데 한 번 이상이 비슷한 오류가 발생했습니다. 내가 여기에이 코드를 실행하기 위해 노력하고있어 : http://x.gfax.ch/Archives/Scripts/boggle.rb을하지만,에 박히 : ruby1.8에서Ruby : "NoMethodError"를 루비 1.9로 업데이트 한 후

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

,이 발견 한 후 임의에서는 N × N 머뭇 거리는 보드를 생성하고 그것에서 찾을 수있는 모든 단어를 출력합니다. 그러나 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은 출력을 수정합니다. P – rubyuser1357796

1

Ruby 1.9에서 메서드 String#[]은 문자열을 반환하고 Ruby 1.8에서는 숫자 값을 반환합니다. (here 참조) 대신 String#chars을 사용해보십시오.

+0

'chars'는 여전히 길이가 1 인 문자열 배열을 반환하지만, ['codepoints'] (http://ruby-doc.org/core-1.9.3/String.html#method-i- codestoints)는 아마도 맞을 것입니다 맡은 일. –