2017-03-07 2 views

答えて

1

簡単な答え、パターンマッチングはキャストのようです。あなたは、静的な型は、より具体的にするためにさまざまな方法でそれを使用することができます。

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); 
関連する問題