私は次のコードを持っています:
type CustomerStatus = |Valid |Invalid
type Customer = {Id:int; FirstName: string; LastName:string; Status: CustomerStatus}
let checkCustomerFirstName (customers: Customer seq) =
customers
let checkCustomerLastName (customers: Customer seq) =
customers
let checkCustomerInBlockedList (customers: Customer seq) (blockedList: string seq) =
customers
Customerレコードタイプには、Id、FirstName、LastName、およびStatusの4つの属性があります。CustomerStatusは、上記の行で有効および無効のDUとして定義されています。次に、顧客のシーケンスを検証するための3つの関数があります。簡潔にするために、関数本体は省略しました。3番目の関数が2番目のパラメーター(顧客の名前が無効かどうかを確認するために比較される文字列のリスト)を受け取ることに注意してください。
ここにいくつかのテストデータがあります:
let customers =
[
{Id=0;LastName="Customer0";FirstName="Test";CustomerClass=Valid}
{Id=1;LastName="Customer1";FirstName="Test";CustomerClass=Valid}
{Id=2;LastName="Customer2";FirstName="Test";CustomerClass=Valid}
{Id=3;LastName="Customer3";FirstName="Test";CustomerClass=Valid}
{Id=4;LastName="Customer4";FirstName="Test";CustomerClass=Valid}
]
let blockedList = ["Customer3"]
最初の2つの関数を次のようにパイプライン処理すると、次のようになります。
customers
|> checkCustomerFirstName
|> checkCustomerLastName
すべてが期待どおりに機能します。ただし、3番目の関数を追加すると、
customers
|> checkCustomerFirstName
|> checkCustomerLastName
|> checkCustomerInBlockedList blockedList
このようなエラーが発生します
追加のパラメーターを持つ関数をパイプライン化するにはどうすればよいですか?
最後のメソッドパラメータの順序を変更してみてください。
let checkCustomerInBlockedList (blockedList: string seq) (customers: Customer seq) =
customers
フォワードパイプ演算子は、左側にあるパラメータを右側の関数に送信します。最後の呼び出しの場合、または左側に顧客のシーケンスがありますが、右側にパラメーターを持つメソッドがあるため、シーケンスは最後のパラメーターとして提供されます。
最後のステートメントはcheckCustomerInBlockedList blockedList customers
、パラメーターの順序を変更するとコンパイラーが満足する理由のように見えます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加