わたなべです.

Eiji-usagi-MATSUmoto <ematsu / pfu.co.jp> writes:

:def hoge(a, b)
:  case b
:  when 0
:    printf("b = 0\n")
:    if a == 1
:      printf("and a = 1\n")
:      break                    # <== ここで抜けたい!
:    else
:      printf("but a != 1\n")
:    end
:    print("hogehoge\n")
:  end
:end

C でも

    do {
	if (a == 1) {
	    printf("and a = 1\n");
	    break;
	} else {
	    printf("and a != 1\n");
	}
	printf("hogehoge\n");
   } while (0);

なんてやる人がいます(おいらじゃないよ).
 
:となって、こんなところでbreakしちゃだめとといわれます。
:どうしても抜けたい時は、どうしたらいいんでしょうか?

これを真似ると

def hoge(a, b)
  case b
  when 0
    begin
      printf("b = 0\n")
      if a == 1
        printf("and a = 1\n")
        break                    # <== ここで抜けたい!
      else
        printf("but a != 1\n")
      end
      print("hogehoge\n")
    end while FALSE
  end
end

なんてできます. うーむ, 邪道.

:というのがあるんですが、これってredoとnextが逆のような気が
:するんですけど、何か私勘違いしてますでしょうか?

perl と同じなので, これで合ってます.

-- 
わたなべひろふみ