多くのパターンが意味をなさないと思われます。例えば、コンパイラが次のコードをどのように処理すると思いますか?
type DisposablePair = DisposablePair of IDisposable * IDisposable
let f disposablePair =
use (DisposablePair(x,y)) = disposablePair
()
あなたの奇妙なエラーメッセージが原因であっても、あなたが結合let
を使用していた場合、あなたは(コンパイラは、新しい関数を宣言していると考えて)(Resource d)
ではなく、Resource(d)
をバインドする必要があるだろうという事実のために、おそらくです。
私はアンダースコアパターンを使用することができないことがあります(具体的には、System.Transactions.TransactionScope
のように範囲を限定するために存在するIDisposable
のインスタンスを処理する場合)。
use p = v in e
:アンダースコアを処理するために
use
バインディングを一般化するとなるように、いくつかの他の状況は、
IDisposable
するが、左手側に任意のパターンを許可するように結合
use
の右側を必要とするだろう一つの方法
は文法的に次のようなものに変換されます
let ((p:System.IDisposable) as d) = v in try e finally d.Dispose()
出典
2011-12-09 18:39:27
kvb
奇妙なことに、あなたは何をやっているのか詳しく説明しようと思います。このコードは意味をなさない。 – vcsjones
@vcsjones:kvbが指摘したように、コードは正しくありませんでした。奇妙なエラーメッセージは赤いニシンだった。しかし、私の中心点は依然として重要です。 – Daniel