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# 不会为您做任何类型提升。由于<<操作员想要右侧的字符串,因此您需要以某种方式将列表映射到字符串。这意味着遍历每个元素,将数字转换为字符串,然后将所有元素添加到一个最终字符串中。

于 2014-02-20T02:09:42.727 回答