なにかのまねごと

A Journey Through Imitation and Expression

Rubyの真偽値

何を今更みたいな話だけど、ハマったから書いておく。

if 0
	p("hoge")
end

hogeが出力される。
これは0が真偽値ではなく、オブジェクトとして存在していると解釈されるから。
なので、最下位ビットが1の時だけhogeと出力したくて次のコードを書いてもやりたいことが出来ない。

n = 5
while n > 0 do
	if n & 1
		p("hoge")
	end
	n -= 1
end #"hoge"が5回表示される

正しくは

n = 5
while n > 0 do
	if (n & 1) == 1
		p("hoge")
	end
	n -= 1
end #"hoge"が3回表示される

というように式を評価させてBooleanをちゃんと該当箇所に置かなければダメ、と。