2013-02-15 3 views
16

'Fixnum을 String (TypeError)로 변환 할 수 없습니다.'오류가 발생하며 해결 방법이 불투명합니다. 그것. 내 논리는 소리가 나는 줄 알았는데 - 입력 된 문자열 변수를 정수로 변환 한 다음 기본 작업을 수행합니다 -하지만 분명히 중요한 정보가 누락되었습니다.'+'Fixnum을 String으로 변환 할 수 없습니다. (TypeError)

puts 'What is your favourite number?' 
favenum = gets.chomp 
better = favenum.to_i + 1 
puts 'Yeah '+favenum+' is nice enough but '+better+' is bigger and better by far! Think on.'  

답변을 검색하려고했지만 동일한 오류의 예가 내 초보적인 루비 기술을 넘어서는 방법입니다.

답변

48

Ruby (다른 언어와 달리)는 String#+ 메소드의 피연산자 인 경우 객체를 문자열로 변환하지 않습니다. 수동으로 문자열로 캐스팅 :

puts 'Yeah ' + favenum.to_s + ' is nice enough but ' + better.to_s + ' is bigger and better by far!' 

또는 사용 문자열 보간 (따옴표주의) :

puts "Yeah #{favenum} is nice enough but #{better} is bigger and better by far!" 
+0

그래서 내 코드의 오류는 위의 줄에서 변수를 조작하는 것이 아니라 변수의 출력에 있습니까? favenum이 원래 문자열로 저장되어 있다고 생각하는 것이 맞습니까? 어쩌면 내가 따르고있는 튜토리얼 (http://pine.fm/LearnToProgram/?Chapter=04)이 전부가 아니라 ...? –

+0

@ Dansoolo : 실제로 'favenum'은 실제로 문자열이며 오류를 일으키지 않아야합니다. 그것을 일으키는 정수형 변수입니다. –

+0

좋습니다, 고마워요. 이제 당신은 논리적으로 왜 '+ 더 나은 +'더 나은 정수가 오류를 일으킬 때 사용을 볼 수 언급. 주위를 둘러 봐서 다른 옵션을 주셔서 감사합니다. 내 여행 계속 ... –

5

이 같은 문자열 보간을 사용해보십시오 :

puts "Yeah #{favenum} is nice enough but #{better} is bigger and better by far! Think on." 
2

을 튜토리얼을 바탕으로 당신은 다음과 같습니다

puts 'Please enter your favourite number: ' 
number = gets.chomp 
imp = number.to_i + 1 
puts 'I\'d say '.to_s + imp.to_s + ' is a much better number.' 

초급 수준에서 "올바른"결과를 생성합니다.

관련 문제