ごめんなさい。やっぱりVMがない言語で例外は無理でした。バグだらけだったため、廃止。
代わりにパターンマッチングを入れました。
#include <comelang.h>
struct Data
{
int a,b;
};
int main(int argc, char** argv)
{
var data = Data { a:123, b:234 };
data.case {
(Value === Data {a:wildcard, b:234} {
puts("MATCH");
}
else {
puts("NO MATCH");
}
}
return 0;
}
[1,2,3].case { (Value === [wildcard,2,3]) puts("MATCH"); }などもOKです。
wildcardはcaseとif, elif, lessなどのみ有効です。
lessはUNIXとCのエラー処理で便利で以下のように使います。
#include <comelang.h>
int main(int argc, char* argv)
{
system("lllll").less {
perror();
return 1;
}
return 0;
}
lessが<0でマッチ、ifが!=0でマッチ, elifが==0でマッチです。
戻り値も取れるため、使い勝手がいいと思います。
例えば
#include <comelang.h>
char* fun(int value)
{
if(value == 0) {
return null;
}
else {
return xsprintf("%d", value);
}
}
int main(int argc, char** argv)
{
puts(fun(0).elif { s"null" });
return 0;
}
などです。この場合funの引数が1など>0ならputsは数値を出力して、0ならnullを出力します。