2013-12-13 3 views
0

해시 쌍을 인쇄 할 때 "문자열이 Fixnum이라는 강요 할 수 없다", 그리고 물론 데이터 구조 부분에, 내가 시도하는 동안 다음루비 : 난 그냥 코드 카데미에서, 루비 어제 배우기 시작

my_hash = {1=>2,3=>4,"5"=>"6"} 
my_hash[7] = my_hash[1]+my_hash[3] 
my_hash.each { |k,v| 
# Here I want to print key and values like "Key: Value" 
} 
4 호선에서

이 작동 :

puts "#{k}: #{v}" 

이되지 않습니다

puts k+": "+v  

String can't be coerced into Fixnum이 있습니다. 왜? 방금 사전 키와 값을 인쇄하고 있습니다. 나는 아무것도 다른 것에 typecasting하지 않습니다. 뭐가 문제 야?

+0

첫 번째 해시의 k, v는 1 => 2이므로 k가 v라는 것을 의미합니다. v class는 Fixnum이므로 문자열 인 ":"을 추가 할 수 없으며 루비는이를 허용하지 않습니다. "# {k} : # {v}"를 사용하는 것이 가장 좋은 해결책이라고 생각하거나 "k.to_s +": "+ v.to_s"를 사용할 수 있습니다. –

+0

예! 방금 이렇게했습니다. ===>'puts k.to_s + ":"+ v.to_s' Ruby에서'+'는 print 문에 숫자가 사용되면 연결을 의미하지 않습니다. –

+1

그래 맞아! 그리고 한 가지 더 :'to_s'는'Class' 클래스의 메소드입니다. 그래서 모든 변수는 그 함수를 가지고 있습니다. 심지어는'nil'이기 때문에 자유롭게 사용하십시오 –

답변

1

척의 의견을 수정했습니다.

문제는 실제로 유형 변환이 아니라는 것입니다. 첫 번째 반복에서는 k1 값을 전달하며 이는 fixnum입니다. +1에서 수행하려면 +의 인수도 숫자 여야하지만 ": "은 문자열입니다. 그것이 당신이 잘못하고있는 것입니다. +을 문자열로 사용하려면 (예 : "#{1}"이 (가) 첫 번째 버전에서 무엇을하는지) 등을 수행하여 1에서 입력을 수행해야합니다.

+1

작은 니픽 : 인수는 표준 숫자 유형 중 하나 일 수 있습니다. Fixnum, Float, Rational, BigDecimal 등이 될 수 있습니다. – Chuck