2017-04-11 10 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

関連する問題