3

F# Canopy を使用して、いくつかの Web テストを完了しています。文字の有無にかかわらず乱数を作成してロードしようとしていますが、それほど重要ではなく、それを使用して自分のウェブサイトに貼り付けようとしています。

私が現在使用しているコードは

let genRandomNumbers count =
    let rnd = System.Random()
    List.init count 

let l = genRandomNumbers 1

"#CompanyName" << l()

これ#CompanyNameは、l を渡そうとしている要素の ID です。現状では、「式は文字列型であると予想されていましたが、ここではリスト型です。」というエラーが表示されます。

どんな助けでも大歓迎です。

4

1 に答える 1

2

canopy<<オペレーターはセレクターに文字列を書き込みます (私は使用していませんが、ドキュメントはかなり明確に見えます) が、関数はリストを返します。ランダムな文字列を機能させたい場合は、次のようなことができます(テストされていないコード)

let randomNumString n = genRandomNumbers n |> List.map string |> List.reduce (+)

これにより、ランダム リストが文字列にマップされ、最初の要素をアキュムレータ シードとして使用して、すべての文字列が連結されます。折り畳みもできます

let randomNumString n = genRandomNumbers n
                         |> List.fold (fun acc i -> acc + (string i)) "" 

すべてを一緒に入れて

let rand = new System.Random()

let genRandomNumbers count = List.init count (fun _ -> rand.Next())

let randomNumString n = genRandomNumbers n |> List.map string |> List.reduce (+)

"#CompanyName" << (randomNumString 1)

通常、F# は型の昇格を行いません。演算子は<<右側の文字列を必要とするため、何らかの方法でリストを文字列にマップする必要があります。つまり、各要素を繰り返し処理し、数値を文字列に変換し、すべての要素を 1 つの最終的な文字列に追加します。

于 2014-02-20T02:09:42.727 に答える