另一個工作轉換工作,我需要做什麼才能讓D)工作正常。最終D)將是一個密碼,但我想只是讓它適用於任何函數的每個字符(最下面是一個例子)。分組爲5個字符的桶是我正在開發的密碼的一部分。Ruby - 爲什麼不for_each不會請求小寫?收益/自我問題?
def keystream_converter(message, conversion)
case conversion.downcase
when 'lower_case'
message.upcase
when 'upper_case'
message.downcase
when 'special'
message.each_char { |ltr| ltr.downcase }
else
'invalid_conversion'
end
end
initial_src = "I see Ruby going 100 years!!"
test_string = (initial_src.delete('^a-zA-Z') +"X"*(initial_src.length % 5)).scan(/.{5}/).to_s.upcase
lower = keystream_converter(test_string, 'lower_case')
upper = keystream_converter(test_string, 'upper_case')
special = keystream_converter(test_string, 'special')
#
puts "A) - " + initial_src
puts "B) - " + upper
puts "C) - " + lower
puts "D) - " + special
輸出:
A) - I see Ruby going 100 years!!
B) - ["iseer", "ubygo", "ingye", "arsxx"]
C) - ["ISEER", "UBYGO", "INGYE", "ARSXX"]
D) - ["ISEER", "UBYGO", "INGYE", "ARSXX"]
或換句話說,'ltr'是數據的一個新*副本,改變它對原文沒有影響。 – DGM 2012-02-06 19:45:46
+1接受。這是我最喜歡的,儘管我也喜歡BaronVonBraun's(幾乎和我喜歡他的名字一樣多))。 – 2012-02-06 20:14:28
這個答案很關鍵,因爲它提到了「收益率」,這是理解控制權在哪裏的一個關鍵概念。 'map'是滿足這些需求和'.join'(或者'result = message.each_char.map(&:downcase).join')的最佳選擇, – 2012-02-06 20:25:33