1
私は変数x = value:| java + interface:/// java/util/Iterator |を持っています。これをx = locに変換する方法:| java + interface:/// java/util/Iterator |?タイプ 'value'のデータをRascalの他のタイプの値にキャストする方法はありますか?
私は変数x = value:| java + interface:/// java/util/Iterator |を持っています。これをx = locに変換する方法:| java + interface:/// java/util/Iterator |?タイプ 'value'のデータをRascalの他のタイプの値にキャストする方法はありますか?
簡単な答え、パターンマッチングはキャストのようです。あなたは、静的な型は、より具体的にするためにさまざまな方法でそれを使用することができます。
value x = ... ;
if (loc l := x) {
// here l will have the type `loc` and have the same value that `x` had
}
か:
value x = ...;
bool myFunc(loc l) = ... ;
myFunc(x); // /* will only be executed if x is indeeed of type `loc`
か、あなたがリストをフィルタリングするためにパターンマッチングを使用することができます。
list[value] l = ...;
list[loc] ll = [ e | loc e <- l ];
または、スイッチ:
switch(x) {
case loc l: ...;
}
など:-)
一般的なキャスト機能も書かれていますが、私はそれはそれを使用するコードのにおいだと思うと、それは難しいコードを理解することができますすることができます。
&T cast(type[&T] t, value x) {
if (&T e := x)
return e;
throw "cast exception <x> can not be matched to <t>";
}
value x = ...;
loc l = cast(#loc, x);