您好我的代码有什么问题,我的错误是: 无与伦比的{这主要是由于我的标签, 无效的记录,序列或计算表达式。序列表达式应为“seq {...}' 表达式中此点或之前的不完整结构化构造
module records =
let debate(irthes:DateTime) =
{
let mutable manch = nexttime(irthes)
let mutable array1: DateTime array = Array.zeroCreate 480
for i in 0 .. 480-1 do
Array.set array1 i (manch)
let next = Array.get array1 i
let! manch=nexttime(next)
return(array1)
}
答案 0 :(得分:2)
我想你想要这样的东西:
module records =
let debate(irthes:DateTime) =
let mutable manch = nexttime(irthes)
let array1: DateTime array = Array.zeroCreate 480
for i in 0 .. 480-1 do
array1.[i] <- manch
manch <- nexttime manch
array1
以下是代码出错的地方:
您没有使用计算表达式(如异步工作流程),因此无需用大括号括起来。
要返回值,您不需要return
。只需使用该值作为正文的最后一个表达式
let!
构造并不意味着分配。它在计算表达式中具有相当特殊的含义。要改变manch
,您可以写manch <- nexttime(next)
。
不是错误,但您不需要将数组标记为可变。您正在改变其内容,而不是array1
变量。
通过使用arr.[i] <- v
写入数组并使用arr.[i]
从数组中读取,可以使代码更好。我也不明白你为什么在写完之后立即读取一个值。
答案 1 :(得分:2)
对你正在尝试做的事情甚至没有那么多。首先,您似乎正在尝试初始化记录 - 为此,您必须使用=
将字段分配给值,如下所示:
type Person = { name: string; address: string }
let joe = { name = "Joe Smith"; address: "1600 Pennsylvania Avenue NW, Washington, 20500" }
此外,F#没有提前退出(return
);任何函数/方法的结果只是最后一个表达式的结果:
let increment n = n + 1
因此没有return n + 1
。此外,let!
仅用于计算表达式。但是,如果要将变量(例如foo
)变为42,请使用foo <- 42
。我看到的最后一件事:return(array1)
的线条缺少另一个缩进空间 - 这真的很重要!
看起来你可能会复制粘贴代码而不知道它的含义是什么 - 这些代码通常不会很好。如果是这种情况,请尝试通过自己测试来确切了解F#中的某些功能是如何工作的。从长远来看,它会变得更顺畅。