Ruby: パーセント記号 %
の使い方まとめ
を読んだところ思い出したの備忘録代わりに
剰余算の%
は負値の時意外?な事になる
わりと有名ですが、Rubyの剰余算は負の値を考慮するとちょっと不思議な事になります。
例えば、C/C++の場合
5 % 3 = 2
-5 % 3 = -2
ですが
Rubyの場合は
5 % 3 = 2
-5 % 3 = 1
となります。
くわしくは、絶対値最小剰余や最小非負剰余で検索するとよいでしょう。
一応Rubyの方が一貫性ある感じではあるが、たまにハマりますので注意が必要です。
ちなみに、ActiveSupport::Duration.buildがこの罠を踏んでいます。
%リテラルの区切り記号にNUL文字が使える
バグなのかそうでないのか微妙なのですが
STR = "%\0hoge!\0"
puts STR
puts eval(STR)