2017-04-11 2 views
3

저는 최근에 루비를 배우기 시작했고 간단한 '암호화'방법을 만들고 있습니다. 원하는 결과를 얻었지만 그 이유를 모르겠습니다.(Ruby) 왜이 기능이 작동합니까?

string = "This is a test" 
offset = 5 

def encode(string, offset) 
    coded = "" 
    string.scan(/./) do |char| 
     numbers = char.ord 
     if numbers == 32 
      numbers = numbers 
     else 
      numbers = numbers + offset 
     end 
     coded << numbers 
    end 
    return coded 
end 

puts encode(string, offset) 

"Ymnx nx f yjxy"원하는 인코딩 된 출력이 표시되지만 그 이유는 알 수 없습니다. 나는 편지가 문자로 되돌아 가도록 지정하지 않았기 때문에 일련의 문자열을 기대하고 있었다. 누군가 일어나는 일을 설명해 주시겠습니까?

+1

문자열 인코딩을 배우는 데 걸리는 시간은 그만한 가치가 있습니다. – zaph

+0

디버거에서 단계별로 실행하거나 매 단계마다'numbers' 및'coded' 값을 출력하십시오. 무슨 일이 일어나는지 보자. 그렇다면 당신이 이해하지 못하는 방법을 찾는 것입니다. –

답변

7

Doc for String#<<

추가]은 --- STR로 지정된 객체를 연결합니다. 객체가 Integer이면 코드 포인트로 간주되어 연결되기 전에 문자로 변환됩니다. Concat는 여러 인수를 사용할 수 있습니다. 모든 인수는 순서대로 연결됩니다.

원래 문자열의 문자는 순서 정수로 변환되고 오프셋이 추가 된 다음 String#<< 메서드에 제공됩니다.

+0

답장을 보내 주셔서 감사합니다. – mwstreit

관련 문제