「ヒューマン・リソース・マシーン」というニンテンドースイッチのプログラミングゲームにて、事前にRubyで書いてデバッグして…としていたときに困って調べた話です。
def copyfrom(a)
raise "$map[#{a}] is nil" unless $map[a]!=nil
$v = $map[a]
end
上記は、引数に指定された番地を$mapから参照して$vにコピーする処理です。
番地aが未定義(nil)だったとき、ゲーム機に移植したときはErrorが出るのですが、Ruby上ではnilを変数に代入するのはErrorではないため気が付きません。
そこで、raise行を使います。
上記raise行は、$map[a]=nilじゃないのunlessなので、2回否定で「nilだったら」という意味になります。
Errorと似た感じでプログラムを止めてくれるので便利です。