return/break
投票の結果が反映され、return/breakに相当するものがサポートされました。
using System; using Nemerle.Block; module M { Equals (lhs : array [int], rhs : array [int]) : bool { block (return) { when (lhs.Length != rhs.Length) return (false); for (mutable i = 0; i < lhs.Length; ++i) when (lhs [i] != rhs [i]) return (false); true; } } Find (arr : array [int], val : int) : bool { mutable i = 0; block (break) { for (i = 0; i < arr.Length; ++i) when (arr [i] == val) break (); } i != arr.Length; } Main () : void { Console.WriteLine (Equals (array [10, 20, 30], array [10, 20, 40])); Console.WriteLine (Find (array [10, 20, 30], 30)); } } /* False True */
blockの引数が脱出用のキーワードになっています。例ではreturn/breakを使いましたが、何でも良いです。
ただ、これで確定ではないようで、こんな案も出ています。個人的には
label: { ... label (xxx) }
だと、vimの自動インデントが使いにくくなるので嫌かなぁ・・・と、私的な都合を言ってみたり。(^^;