何を今更みたいな話だけど、ハマったから書いておく。
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をちゃんと該当箇所に置かなければダメ、と。