2014-02-20 54 views
3

我使用F#Canopy來完成一些Web測試。我正在嘗試創建並加載帶有或不帶有字母的隨機數字,這並不重要,並將其用於粘貼到我的網站。F#Canopy - 生成隨機字母和/或數字並在變量中使用

我目前正在使用的代碼是

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

let l = genRandomNumbers 1 

"#CompanyName" << l() 

#CompanyName的是我試圖升通入元件的ID。就目前而言,我收到了錯誤'表達式應該有字符串類型,但是這裏有一個列表類型。

任何幫助將不勝感激。

+0

好吧,'l'會返回給你一個大小爲1的缺點列表。你想隨機數字是字符串嗎?你必須映射 – devshorts

+0

對,是的,我想要一個隨機字符串返回說10個字符。然後將隨機字符串輸入到我的#CompanyName類字段中。 – DevLife

回答

2

<<運算符canopy向選擇器寫入一個字符串(我沒有使用它但文檔看起來非常清晰),但函數返回一個列表。如果你想隨機字符串的工作,你可以做這樣的事情(未測試的代碼)

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

此地圖中的隨機列表,然後字符串所有concats串在一起使用的第一個元素作爲累加器的種子。你也可以做一個摺疊

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#不會爲你做任何類型的推廣。由於<<運算符想要右側的字符串,因此需要以某種方式將列表映射到字符串。這意味着迭代每個元素,將數字轉換爲字符串,並將所有元素添加到一個最終字符串中。

+0

對不起,F#對我來說很新。我是否使用有關代碼然後添加#CompanyName「<< n – DevLife

+0

不要擔心,我更新了我的答案以包含有關隨機的最佳實踐(您不希望從頭開始創建它,或者它不會那是隨機的),並將你的例子拼湊在一起,讓我知道你是否有任何問題 – devshorts

+0

我recevinfg和錯誤蘭德第二行下來這個表達式應該有類型int - >'a但是這裏有類型System.Random我也試圖刪除它,然後我得到了錯誤List.map字符串此表達式預計有類型int,但這裏有類型字符串 - > int - >單位 – DevLife